{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "name": "fer2013.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "cVbLZURCveTi",
        "colab_type": "code",
        "outputId": "997eca60-68ca-4854-f52c-3be31e27cffe",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "%tensorflow_version 2.x"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "TensorFlow 2.x selected.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "2nz38mJZXN_P",
        "colab": {}
      },
      "source": [
        "import matplotlib.pyplot as plt\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "\n",
        "import tensorflow as tf\n",
        "from tensorflow.keras.layers import *\n",
        "from tensorflow.keras.models import load_model\n",
        "from tensorflow.python.keras.preprocessing.image import ImageDataGenerator\n",
        "\n",
        "%matplotlib inline"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "EjKPXZ3TX3Jb",
        "colab": {}
      },
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "rMt7BeH-FyBc",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "! rm -rf test; mkdir test\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/webcam amil.zip' -d test\n",
        "! unzip -q '/content/drive/My Drive/cs230 project/dataset/webcam paki.zip' -d test"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "juGBLEC8HIL9",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def get_datagen(dataset):\n",
        "    return ImageDataGenerator().flow_from_directory(\n",
        "              dataset,\n",
        "              target_size=(48,48),\n",
        "              color_mode='grayscale',\n",
        "              shuffle = True,\n",
        "              class_mode='categorical',\n",
        "              batch_size=32)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Vbd0LVf6HWmV",
        "colab_type": "code",
        "outputId": "f65085b7-0f97-4c8f-9b29-4a0696c0003d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "from skimage import io, transform\n",
        "\n",
        "X_test_gen    = get_datagen('/content/test')\n",
        "\n",
        "X_test = np.zeros((len(X_test_gen.filepaths), 48, 48, 1))\n",
        "Y_test = np.zeros((len(X_test_gen.filepaths), 7))\n",
        "for i in range(0,len(X_test_gen.filepaths)):\n",
        "  x = io.imread(X_test_gen.filepaths[i], as_gray=True)\n",
        "  X_test[i,:] = transform.resize(x, (48,48,1))\n",
        "  Y_test[i,X_test_gen.classes[i]] = 1"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Found 204 images belonging to 7 classes.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0diR1j4JV0xl",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "model = load_model('/content/drive/My Drive/cs230 project/models/webcam-SGD_LR_0.01000-EPOCHS_100-BS_128-DROPOUT_0.35test_acc_0.698.h5')\n",
        "#model = load_model('/content/drive/My Drive/cs230 project/models/tl/ResNet-BEST-73.2.h5')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AkkxgoSy1Ot_",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "y_pred_probs = model.predict(X_test)\n",
        "y_pred = y_pred_probs.argmax(axis=1)\n",
        "y_true = Y_test.argmax(axis=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2BMengn9162u",
        "colab_type": "code",
        "outputId": "794774a8-181c-4ba1-fa00-d6df2fc5f644",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "incorrect = np.count_nonzero(y_pred-y_true)\n",
        "print(\"Accuracy on test images: {:.2%}\".format(1.0 - incorrect/len(y_true)))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Accuracy on test images: 65.69%\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wAcLxbqE82e0",
        "colab_type": "code",
        "outputId": "f542c7ed-7446-4933-bdd9-fde4dc661e0d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 399
        }
      },
      "source": [
        "from sklearn.metrics import confusion_matrix\n",
        "from seaborn import heatmap\n",
        "\n",
        "emotions = {0:'Angry', 1:'Disgust', 2:'Fear', 3:'Happy', 4:'Sad', 5:'Surprise', 6:'Neutral'}\n",
        "\n",
        "cmat_df_test=pd.DataFrame(\n",
        "  confusion_matrix(y_true, y_pred, normalize='true').round(2),\n",
        "  index=emotions.values(), \n",
        "  columns=emotions.values()\n",
        "  )\n",
        "\n",
        "plt.figure(figsize=(5,5))\n",
        "heatmap(cmat_df_test,annot=True,cmap=plt.cm.Blues)\n",
        "plt.tight_layout()\n",
        "plt.title('Confusion Matrix on Webcam Test Set')\n",
        "plt.ylabel('True label')\n",
        "plt.xlabel('Predicted label')\n",
        "plt.show()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 360x360 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5ZPROhuziy8c",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "emotions = {0:'Angry', 1:'Disgust', 2:'Fear', 3:'Happy', 4:'Sad', 5:'Surprise', 6:'Neutral'}"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "uL47zUSlMGSX",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "for i in range(0, len(y_pred)):\n",
        "  if emotions[y_true[i]] == 'Happy' and emotions[y_pred[i]] == 'Happy':\n",
        "      print(i)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "pGZJO-YrxRpu",
        "colab_type": "text"
      },
      "source": [
        "# Error Analysis"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4mbxZSEzicUo",
        "colab_type": "code",
        "outputId": "97398e26-dd31-4c10-8a86-9683be5407b1",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 322
        }
      },
      "source": [
        "i=102\n",
        "\n",
        "print(X_test_gen.filenames[i])\n",
        "plt.imshow(X_test[i].reshape(48,48),cmap='gray')\n",
        "plt.figure()\n",
        "print(y_pred_probs[i].round(2))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "3 happy/happy-255248-0015.png\n",
            "[0.07 0.   0.02 0.71 0.13 0.   0.06]\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 0 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qPv_cvoYz04N",
        "colab_type": "text"
      },
      "source": [
        "# Saliency Map\n",
        "We copied this code from: https://www.kaggle.com/blargl/simple-occlusion-and-saliency-maps and made some modifications.\n",
        "Original paper: https://arxiv.org/abs/1311.2901"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "J8tJgC7jz2h-",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def iter_occlusion(image, size=8):\n",
        "    occlusion = np.full((size * 5, size * 5, 1), [0.5], np.float32)\n",
        "    occlusion_center = np.full((size, size, 1), [0.5], np.float32)\n",
        "    occlusion_padding = size * 2\n",
        "\n",
        "    # print('padding...')\n",
        "    image_padded = np.pad(image, ( \\\n",
        "                        (occlusion_padding, occlusion_padding), (occlusion_padding, occlusion_padding), (0, 0) \\\n",
        "                        ), 'constant', constant_values = 0.0)\n",
        "\n",
        "    for y in range(occlusion_padding, image.shape[0] + occlusion_padding, size):\n",
        "        for x in range(occlusion_padding, image.shape[1] + occlusion_padding, size):\n",
        "            tmp = image_padded.copy()\n",
        "\n",
        "            tmp[y - occlusion_padding:y + occlusion_center.shape[0] + occlusion_padding, \\\n",
        "                x - occlusion_padding:x + occlusion_center.shape[1] + occlusion_padding] \\\n",
        "                = occlusion\n",
        "\n",
        "            tmp[y:y + occlusion_center.shape[0], x:x + occlusion_center.shape[1]] = occlusion_center\n",
        "\n",
        "            yield x - occlusion_padding, y - occlusion_padding, \\\n",
        "                  tmp[occlusion_padding:tmp.shape[0] - occlusion_padding, occlusion_padding:tmp.shape[1] - occlusion_padding]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "35PPO5vd1PfW",
        "colab_type": "code",
        "outputId": "93390d4b-6dc6-46d7-c2c2-551838003d67",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 267
        }
      },
      "source": [
        "i = 126\n",
        "data = X_test[i]\n",
        "correct_class = np.argmax(Y_test[i])\n",
        "\n",
        "# input tensor for model.predict\n",
        "inp = data.reshape(1,48,48,1)\n",
        "# image data for matplotlib's imshow\n",
        "img = data.reshape(48,48)\n",
        "# occlusion\n",
        "img_size = img.shape[0]\n",
        "occlusion_size = 4\n",
        "_ = plt.imshow(img,cmap='gray')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1_mPdHW-1jf3",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "print('occluding...')\n",
        "\n",
        "heatmap = np.zeros((img_size, img_size), np.float32)\n",
        "class_pixels = np.zeros((img_size, img_size), np.int16)\n",
        "\n",
        "from collections import defaultdict\n",
        "counters = defaultdict(int)\n",
        "\n",
        "for n, (x, y, img_float) in enumerate(iter_occlusion(data, size=occlusion_size)):   \n",
        "    X = img_float.reshape(1,48,48,1)\n",
        "    out = model.predict(X)\n",
        "    print('#{}: {} @ {} (correct class: {})'.format(n, np.argmax(out), np.amax(out), out[0][correct_class]))\n",
        "    #print('x {} - {} | y {} - {}'.format(x, x + occlusion_size, y, y + occlusion_size))\n",
        "\n",
        "    heatmap[y:y + occlusion_size, x:x + occlusion_size] = out[0][correct_class]\n",
        "    class_pixels[y:y + occlusion_size, x:x + occlusion_size] = np.argmax(out)\n",
        "    counters[np.argmax(out)] += 1\n",
        "\n",
        "pred = model.predict(inp)\n",
        "print('Correct class: {}'.format(correct_class))\n",
        "print('Predicted class: {} (prob: {})'.format(np.argmax(pred), np.amax(out)))\n",
        "\n",
        "print('Predictions:')\n",
        "for class_id, count in counters.items():\n",
        "    print('{}: {}'.format(class_id, count))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4PU2uvMf5I-T",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Reverse heatmap so that red means important, blue means not\n",
        "heatmap=1-heatmap"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_88KcaHo3AFD",
        "colab_type": "code",
        "outputId": "a9161aac-ad2a-4d29-e522-d875d9ec557b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 269
        }
      },
      "source": [
        "from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
        "from matplotlib.colors import BoundaryNorm\n",
        "from matplotlib.colorbar import ColorbarBase\n",
        "from matplotlib import cm\n",
        "\n",
        "fig = plt.figure(figsize=(8, 8))\n",
        "\n",
        "ax1 = plt.subplot(1, 2, 1, aspect='equal')\n",
        "hm = ax1.imshow(heatmap)\n",
        "\n",
        "ax2 = plt.subplot(1, 2, 2, aspect='equal')\n",
        "\n",
        "\n",
        "vals = np.unique(class_pixels).tolist()\n",
        "bounds = vals + [vals[-1] + 1]  # add an extra item for cosmetic reasons\n",
        "\n",
        "custom = cm.get_cmap('Greens', len(bounds)) # discrete colors\n",
        "\n",
        "norm = BoundaryNorm(bounds, custom.N)\n",
        "\n",
        "cp = ax2.imshow(class_pixels, norm=norm, cmap=custom)\n",
        "\n",
        "divider = make_axes_locatable(ax1)\n",
        "cax1 = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
        "cbar1 = plt.colorbar(hm, cax=cax1)\n",
        "\n",
        "divider = make_axes_locatable(ax2)\n",
        "cax2 = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
        "cbar2 = ColorbarBase(cax2, cmap=custom, norm=norm,\n",
        "                         # place the ticks at the average value between two entries\n",
        "                         # e.g. [280, 300] -> 290\n",
        "                         # so that they're centered on the colorbar\n",
        "                         ticks=[(a + b) / 2.0 for a, b in zip(bounds[::], bounds[1::])],\n",
        "                         boundaries=bounds, spacing='uniform', orientation='vertical')\n",
        "\n",
        "cbar2.ax.set_yticklabels([n for n in np.unique(class_pixels)])\n",
        "\n",
        "fig.tight_layout()\n",
        "\n",
        "plt.show()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 576x576 with 4 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WDvNDM_q3eU2",
        "colab_type": "code",
        "outputId": "ca49c8aa-957c-4539-8bcb-333e1fd0360f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 357
        }
      },
      "source": [
        "import cv2\n",
        "\n",
        "plt.figure(figsize=(6, 6))\n",
        "\n",
        "plt.imshow(img, cmap=cm.gray)\n",
        "plt.pcolormesh(heatmap, cmap=plt.cm.jet, alpha=0.50)\n",
        "plt.colorbar().solids.set(alpha=1)\n",
        "\n",
        "plt.show()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWUAAAFUCAYAAAD8oy2zAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOy9WWwdyZom9kUuZ+E5PNwpiqQkSpRK\nay1SqVTa6l7ZPT1uDwx0v9juHsCwgQH6pdswDPuhHwaGYWCAeWmgAWNgoA00euAHj/3mfuhG29Mz\ndQdVt+re2kVJpX2jxH3n4Tkn1/BDZOQfkZkssUqqK7JufILA5M/IyMjIyMiI//sXxjmHgYGBgcHu\ngPW6G2BgYGBgQDCTsoGBgcEugpmUDQwMDHYRzKRsYGBgsItgJmUDAwODXQQzKRsYGBjsIjivuwEG\nBgYGPwaOMsZbL1nHLPD3nPPfeyUN2iHMpGxgYPCTRBvAn7xkHf8cGHwVbfk+MOoLAwMDg10Es1I2\nMDD4SYIBcF93I34AzKRsYGDwkwTD3pzg9mKbDQwMDF6IvbpSNjplAwMDg10Es1I2MDD4ScKoLwwM\nDAx2Efaq+sJMygYGBj9JmJWygYGBwS7CXl0pG6LPwMDAYBfBrJQNDAx+kjDqCwMDA4NdhL2qvjCT\nsoGBwU8SZlI2MDAw2GXYixOcIfoMDAwMdhH24ofEwMDA4IUw6gsDAwODXQRjfWFgYGCwi7BXV8pG\np2xgYGCwi2BWygYGBj9JGPWFgYGBwS7CXlVfmEnZwMDgJwmzUjYwMDDYRdirK2VD9BkYGBjsIpiV\nsoGBwU8SRn1hYGBgsIvwW6m+YIz9HmPsDmPsPmPsz15VowwMDAxeFnJSfpn/rwM/eKXMGLMB/CsA\nvwvgGYDPGGN/wzm/td05/f39/MCBA0V17UgGAFEU5WS2bReW7XQ6Odn8/Hxh2Xa7vaNrAQDnvFC+\nU8Rx/L3Kl8vlnKxarRaW7erq2tH5AFAqlXIyyyr+Tn+fZ/R9sF1fFsm3ex6+7+dkrVarsGzRmAjD\n8Lua+MJ2AcX99n3GyXb9vt09F7V5u/egqB3bjcGiZ7pdvd8HlUolJysaqwAwPDwMAPjiiy+WOOdD\nL3PdvagKeJk2XwBwn3P+EAAYY/8GwO8D2HZSPnDgAP7u7/4uJ3fd/DfJcYqb1mw2c7J6vV5Y9u7d\nuznZX/zFXxSWvX79ek62urpaWLbohdhugip6IbabMLZ7MScnJ3OyM2fOFJZ9++23d3Q+AExMTORk\ntVqtsGzR/RU9N6D42W03QQVBUCgvmjzX19cLyz59+jQnm5qaKix761Z+eC4vLxeWLZq4tmtvd3d3\nTlZ0D9thuzG83RgsanOj0SgsWzSxFy1CgOIP9Xb1fp/FxfHjx3Oy8+fPF5b90z/9UwAAY+zJji/w\nE8LLTMpjAKaV358BeH8nJ/75n+tfSMsSX+KPP3Zw5UqYyMQE9dFHNq5epUHl+2LwfvJJCZcuiRWS\nHEgfffRcK7u8LF6gL7+McO6cuMbU1LsAgIWFUQwPz6RlFxbGAQBbW8dQq90DQC+V5+1HufxtWlYO\nRt8/glLpoXYvRbKsXL7Y0Zn/HLZ9Ly0jJ75w8CqcpY9S+WxfH5q186hvfZ7KIojVxDxOYh+obfNz\nI3jQdQCTdXo0fUt9AIAbrUGc6VpK5b1hb66dsi9/tVjF+0P5F/dXN0huJ8/t04cVXDxCE5B8dp88\nKOPSpAcA4OA5GQDEkejLT39RwcXDVEcYhvj19S5ceIs+YB1PTHxf3mzg3OmNVL6+3o1bD4ZxanIh\nlS3MiwXWk2OHcWjkUSpfPPImFvtOY2j1ZiprjYhrrA2/g96Fr1M55xzrw2fRs/AVtTd59hv7z6Ex\n/6XWb6tDb6Nv8RvtHgBgfd9Z9MxTHUUy2e8r8VvoX6IFQqerg43uc2hsfqmd3+prod3/Pqorv0pl\nzXIZmz3vonv9C60s5xzN+fOor9H4CaLij4vt29iK3kPN/iyVrW2Knda6dxY9ZWoz5xwbK+fQKH2Z\nq2ejeQ6NOsnbwSDmFk5gZPh2KltYGQUA3HswhmOTz1P50lph0743GAD3ZZfKO99EvTL86CZxjLE/\nZox9zhj7fLsVicHrw+crxSs0g98OtOILr7sJPxoYAxzn5f6/DrzMZZ8DUBXE44lMA+f8LwH8JQC8\n/fbbL6eMNTAwMNghGAPcl1eH/8bxMpPyZwCOMcYOQ0zGfwjgn37XCYwxOI6T053KbTtjyhY+2frF\nMdN0uHKbZ9t2eux5YtsbRSE8j7bGMzNCPbG5WcPMzBYAYGtL/PR9Pz2Wv4s6ovRYblU555r+TOro\nOOc5fV1WJvWujLH0vnt7hdpgq1JBrUYqhL4+oWZYcnoxWJ9I5aOjo3jUGsThgydT2fCQUF9ES4M4\nOUjy3r5eLHt1HB6nRytJwScLFewfJj1wuVxGpeWgt5fKSt2v67oo4hJdx0U14WwkAeS4tkY8ymfo\nODYqFXEs1ReqTL+eg2oXyRkYymUbjQa1rc7Fqr6ry8HgIOk+exo9eL5YxsEDRCYNDQr1RaunhtOn\nSF22srKCG/4gzozT2/rs+TMAQFxpYLw0nsrn5+e1cQaQLpaDa3py3/e1saMiO37iOEYcx9q4luf5\njq/xJttxK7VaDWHJ1TgA3/dz11LbIJ+B/L3oOI7jXB30LuptjuMYURRpenb59yAINL310tISWq0W\nlpZIfSbveW2thsePH6fyCxd+uqv3neAHT8qc85Ax9qcA/h6ADeCvOOc3X3CagYGBwW8EUn2x1/BS\nTeac/y2Av31FbTEwMDB4ZXglRN9rwGtp8scf65eV292pKdpSxrHY6t+8qSuFpApgaopUIFEk2OFb\ntyIAxOAvL4ut3bNntK1dXT0EAGg2R7R6Ox2hDvD9g0obxBYuDGtavXK7F0VjuXvLyuR9BMF+RSZU\nCG37MFCndkSOaOe6fVirw2t1Y87T27uwJO7t0XqPJq80K7hTqgKKgYtUodxa1c2dbNvG000LH83k\nh8HUcrEy7umKBTQTlYyVPLdpvSyDkF+fpmckt87Zsun17ttAxuJt6rZelvPk2d/R5XFk4eY93Twv\nCEXZOyerWr1t38KjQO+zjYrol4XSqCbfGtiHjZ4jmXrFVr3V/wagWAkyMGz1Hyu8t6ycc47WwBs5\nGQC0O8cB0qrBsixsdRXUy4Ctqi6Pogh+ZRTN3rypWXvxuGZJEHMxtgOMAZyMpljM0OEnAEUDYgWi\nL9uRbtbGOUc7OA4oGhv5znj+Sa1sELrYauvt9QLx3q5tTGjyD/9Drvk/DAxiD7/H8FomZWn2JsGY\npfxN6GNVvezly6SzUnVs0vyN9Mg2Ll6kCfjuXRrdx46J4zAk08e+PjrmfCU9rlRuJ2VlO0c1Mze1\nbY5zP3d/qky15S2XhWlWqn+NHqHWVEzX3L70eDC8kR6PdonJ4nAXtXd4cDg9PjOomLn19QIecL6f\n9JKqvvfiMH1cyuUyPppxcHWUnoeqX7yyv8Bsas5N5apTwQdvUJ+oNs0fHE/074o+U8q06z0Frr5B\n7ZAT+wfvUVk5kQDA1feobOCL9lw6R3xCqs/sAd7roXGwEonnfKZEffas8yw9Ptih5zy/LByN+pfJ\nRC2t1wIac2TyJe9ZlalQ5XLi6p79IieDA9TXyXRNjvesSZy8Xs8mmaj5vo9mr276RhcA6o5iEif1\nwPx9VBmZ1VmWBcRAl/XrVKaO4W4302ZXr1fVOXdVqI5qRYxB1UxOtX8eGiDN57WfnQYA/OL/y9/G\n98IeDX6xK5qs+iXI4ziWZJqdHou/u2k5OTClgX273cbqKtmvPnkiJrG1tVE8eSJIP0nuBUGgEX3b\nkRnF7WW5Y/WnSmRKb7ooctLjwcFBcW9dXekxAIyPC5IpbPbiUP1QKh8bHcPqbA8m9tN1JVn4xCtj\ndJRWwG7JRWXdRU8PTZgpIefkCTnLsrTJVU4O2fuQx5ZlpROFk+wNbZvBLVFZ2ReWjVQu7ZEti8Gx\ntSVmKldfftEuoFSmtskJ3HEECShRcktwSwy1Gg1n6cxRc4DhYSLD+vr6MDNnY3KEVsuSLGs1e3C8\n7mp13Gf9ONp3NJVNT4uPqF+ppM8AEARizGPtgy2PswRgEXkny8Z2nPnoF7+ikjBX/+55HsC/n5dk\nFkVEn5zA4zjOOc8Ukd1F6HgdhFGIjqfYoq+I96zdbmNlZWW7U3/rsCsmZQMDA4NXDrNSNjAwMNhl\n2IMz3K4l+qJIbMlv3dIJHMfJE32bm2Irev/+llZ2YUHoYtfWSEXQaoktZ7utE3JyexmGE7n27oTo\nI/tqnSxqtUT7JZEIAIuLYru8NjwKWETgeU2hY3ve1mOwLMx24/6y7nlXWU3Izdk8eTcFG1BCWKT9\nu5Qh5BjDkw2dDUnJtIKyAHB9xgISdbWVqCG+fgJorFeCr5XIBZyLv3/ztDhGyDd3mUbIMQZ8nQtT\nkVzvln49zoFvbun1Sg3T14cBkDc94sjG9RXdTr7ZFOPnXluP+7HJLDxn+rNY7xVqkbX6hHbL7Uob\n7YEMERYn5N2QLrcsK0f0RYmKruOd0Ig+z3YKiT7LttCsHNVkgRugXc/HmACA9tJxQNEybEf0AYCH\nk1AoALBY3GiWAASATnBCKyvfjSzRxxhDxz+h30PCJbU9vc2G6HsNyBJ9qu5SkneqDk7GuACAclkt\nK0bI7Kx8m0O88w7VG4b0Nso4F4uLi6lMxrgQoDehVMrOBjrRp+rbXPcBAF3PLGWAHgmrq0sEzhlK\nHD/gzGAoJtfz8To5LqixK8b2i8n/7H6atXp76XqXDhPB5ZZcYF0n6TRCbixLyNmaTL03lQBMn9Ec\n1eG4sg0MPz9Jb6baF9dOJfVG9Pefn1Df+OTnU2h1WIllx7VLVJR0ogw/v6g4PyST38/fz58PB7im\nfCeDQLT9gxG657k56tezdTqe2RRj5ignInB6LXkuFjC8RuNE6kS7Z4gIU3WttecUS0LqgVWiL9XV\nloDaKpWVPESW6JP6974tirUhOZLa2mfIIYYWzyLkybPNEH1Chjz5l9ShEoCiIbpM1VurRJ8cE6rM\nsRXHoC4iC6/9TFiP/LYSfSYdlIGBgcEuwm/0OxLHceKOqqsk1JWV/NLKyHGMWekxAGxuCusKz6ti\nc1OYJ5E7dZweA2SV0en0p8dF7tTqddVj9ae6gpQrnSgi9luuaFotV1sd9/T0JGXL6XF/fz8AoFmt\nor+vPy0r5TNRNT0GxGrbdd1t48+qCIIAUWxpLLlsexwzTW5ZVs6NXT4Lznlxn4DcdaVFBY+t9FiW\nEdezEIZxcv+JdUHsIFCuJ7ewPLYRhYqpnM3BuYVIqVdeI45shIFi5RBHiCIHfpBf2UeWDV8pa1t2\nzrJExu+tcQfDwxR7urvRjdXlCo4PkFpDPu+A9eFwH9mTh2EIv1zWzLxkAK7tXJ9VyPHjWY4W/zoM\nw0KLoDAMEZZCzZXZsqzcvUlk5fI+rMjSVqxRFAFcfyfTZwfdMsSyrNw4kbuyrFWPZVk5axG82Bjk\n5bBHV8p7sMkGBgYGO4TRKRsYGBjsEpiV8s7xySe6xQC5TqtODGJvk3Wzlru427dpi7e8LAiymZk1\nAOQ8srkpMm60WsT0yO276k4N0BZNtb4gK4s6VOuLKMq7TkeR6ErVykLIy0lbyFsvCIQaYr40ACju\n02uLYuv7aE13A642q7g9r6fTkVvDrPUFANyySpqbtezfGyt5q5enmxaKspFl3axTC44Zm6wvEtWD\nsKjIu1Rff6rI+Atcsu9buvWFxRKLCqWOxArg+m19ex5zlnO9Ttt71AbmSG4xC9+s6PXGseiXqVW9\njiCs4NaG3r+rXIylaTagyZcHylhv6O7x7apQLXSGdKsDz7Zz1heyvVutY4CSxCSO4+0tKgrk25bN\nuFnLse3HowDe067n4aRmZSGfp49TeptjBi/Uy8qxlrWoYIwJF3IVifriR7O+2KN4LZOyak0B6F5L\n0jJD1SWqbtadDunQLlwQx3fvSnY8xuTkplKWrCC6u8WxmopJulMDurWH6wqXT9KVjWkWFWp7peu0\nqgeUVhYA6ZQBoL9fZMbYvz95+WvLOFim9owPkfXFmSFyAx7oFxPAhYNUVg0nqVpfgAFoApf2kUzV\n7V0eofsUL5CrWWqousRC64t5sr6w03nNws9O5HXKAFK5qotU3anlxI6nuvu1ZVui3vfzOmUA+OCC\nrlMGdNfrtL1l3dJCtNnCz/bnQ1MCwNV9dNxOMs9cHKAP8oM14izeUGzt7i0LS57BZXKPV5M6dD0j\nqwP57FTri7S9lm5pIdumul6rKJIXls24WZOOW88yEiHKWVmo+vAqMlYZjl5WHWu16md6WehWFqpO\n2VhfEHZFk+Xcxzkdy4eYJShmZ2cBAM3mMGZnxST3/LmIrb+5WU+PgeJ4yEQ46aRFkeu0fCGyrqRy\nAlbJDEnCBYFOyEniZ2uLSCDpAlwqldDdoEEs4wM4jpMey+tk+yGN6RzznFsuAyu8n+zxi4ghtSz1\npaUQh0mfZsg7+TGLYzfdmUiztTi2coQeIFa7keJOL54ZtLJpO5l+H0Uux+kEzqG9/H7gI4pd+Arh\nKVfr2RjJXdUuuK6Nrir1z8EDYoc1v1HDQSUOted5CJweHKzRDiyN3e04WuLQVquFMAy1HH7y75zl\nYy8XEYW+7yOsFdexE8hxy2KWS4xqodj1PosoinLvhkoUq+cxxr6TPFbjmrxSGJ2ygYGBwS6BWSkb\nGBgY7CKYSXnn+OQTPXCuDN1540YHgL4Fy8pWV8X26MmTdUh3sKUl4Qq7tlYFQNHV2u3h5OcByFv1\nkzCPQXAYKsElt1JheCSVy+h0cVwGoOqq3aSuPgDJ9pwLlUazWQdAbt2+L1QZKysupO/z5qbYqj1/\nsw4wcp+e3RLH9+265mpbCkr4Ni4DSrZ5ueW+FZcAJcCWZVm4WXG182Xc4xvMSUk6QOhzn8LCRxsF\n8ZRhq5wpxUNet1XOU8gW7MKRpMpl/95YdLSyKSE3awOeLp96ZmvDIXX1nraywyQnk8Tind/voKTo\njzmPcf+Ih1JHdcsWx/ePdFDq6NHu7k9EKHm0B/b6Rdn5/jXcaSqZ0wdqCMZ9LD5TXLWPTAAAame6\ngBsTqdgNApTeaYB/Te7TTNq+dw5Add6L4xjt/ceBWf1+oyiCP35K5JBPEDpOYVkAaM+OAYvKw0/6\n0o8a2LSJiORxjHZrGOgiN+lIZm9vjwDVM1QH5/C3IkAJOStVTJ3OCqDErWaWhXZrGQgb2vkA0G4v\nAwHJP/x3d/I38FuEXUH02anxepRzwc7KHjyQbtI1nDwpZp7btyVhN4ahIdIpr6zIWcxGvS6IOgrX\naaFc/jYtS+FBLZRKgugLUmeEYdg2xUiuVKTOOEalItxuyWkgRk8PpbofGJBOIBH27xcT+8hIoi/u\n3cCxbvpAjexLLDFWgLP9JK/X60AZeH+ESM5UpzoLvL+f5I7jAF6G6HOSSWUZuDKguF9bNj5acnB1\nsCBU6RI0eUrezSBf3gKuHi2IyWwBVyZ1nTIs4MoRxYFFsoVzeh0WEyTSB2cLdMoO8LNzig4yWRH9\n7N08KVjaH+ODEao3imLYFnBRPZ3J/gAuxfr1bBbjsqIHXV9PXJlrEc7ZdB/3FqZRjgYxHio56ObE\n+PJG2yjP0VhrtVqIR9uwpilOs9QHe04VpQ1y3w7DEOjOu077vg90A5XlT/U6urcj+pqoO0QsyvGz\n2X4T3d1TSv9EgBWgZpP7dhDL+/RRBcVv5uCAvQ+VEn1FUr1+fARdFQpNYNs2EB1GvfqIzpf9Gh9G\nTZFf+5mwBvnFv8/fxveCWSkbGBgY7DIYou+7YVkWSqUSbNvT5EVWEtJ0zfeBZpNWJORSPYKZGWGA\nKoPBtNv9yupYd5MmiwDKRB1rbD9yx/Krz7nO7KcuqgrjX5RlGwBcl+R0LAPGM9iK5YNkoDnX2ego\ninJWFlIlEfNYs1qwYWuu0ICySuXKMYT5U8ytnNWDqNdCGIW5OuLYQhjoK+WsTK5+1X6XMsYYrY6h\nJwfQXHvjSLhZF7SNx6zY4kQJ20buvgy24qbPOcBYrFmc8G2Yf9UqSKJeFyqmUqmNukNmkIcOHUKz\n4eKQReoL6dq/XK9jYITs0e/fv5+zTpDu0kElQKS4Ttu2vSM3bUCMk2ygfSnfLtD+dtYT6rPQxqvy\n7OI4BmNK8CdRY+GxeHa69cWPDrNSNjAwMNhF2KOTsokSZ2BgYLCL8JqC3OtEn9zS3LypJMNMNBZ3\nMkTs3JzYBi4uUhS1ZlOQJO32fqg+n2mG4PaBVEbB7HWXWIkieRhaUK0vKHA9BUCPY9GGjQ3dRbrd\nribtJdOAtTXxc7raDXSIda6uiLL3N/WA9qXNEm6vZswNkh3j7ZW8+/WtUsbNWlq3bGYeNwOm2zY+\nXkYONzIWGekzWnSBNb3szdniqH83lCzZqZXF823coR/aaheDcy4yXGvNTcpm5JZliSD5BWuMO8c4\nbCW6e8xi3GSANk6Svsx4dYOhoGzy98d2DMdW1A8NF4+69HYtvyHG3fq4HiifD9aAU5OFG/1w5Tii\necVxiFno7NPdtIEk4uKI7vbs2xY6w/myPObwvhkF2nqEQADw/X0A3tbKt9uT+vmJeqfTOZqRc3ie\nDfXByefZ6ejJHhhjyfuZR1b+4YdLheW+N0yQ+53jyhU9nkCs6DkvXxZ/a7Vogn6PXPPx1VcUyGB8\nXByH4eNEEqJev5v+XdVfSXmzSQOoVJpSytI1XJfkAoNw3cfpb3rgemHtoSbR7O9fVo7p4zE2JvTk\naSLPxibeqJCZknSnBoB3+mnmq3WJ8u/tIzs3pujxLoxk3K894FKfYn2h6FQv99MHkVkMH2csMtQ+\nU8umuugh4HKf/lEFgMuHFfdtRe8orS+0RAaKlUWqu5zR5VKHeuUdZSJRsp5fPUtlhX7U0qwvJErd\nDFeUNzPkABDjEi/QKVvAJc0qw8qVle2qRBbOx1TvyoYYV6c3qL3BXUpUMKAcr96/Dw6AfUoWDrIf\nnEo/So/JKiP1GH2qB5eX3qaVx2R9IQPf157qlhpRFAHRaVSrZDlBHMnbqNXy7ajXryvnKxmqu75O\nj0VfDKNaJcsk9Tl3dT1Q5OI+ajWyslChyq9d+z0AwC9+UVh059ij6ovfeJOlS6wKL8lwq2bLJUKv\nGzMzNJFS5ure9FgnCmlVRLGTQ+0aVJbeQDVmsxyY0p2ac91NVg5+y7KV42K38CI5kSg6ubUtIRdH\nOULPYcVxaeMocctV4xunJJ2jx062GOLY1mXS5TjW61CvlSNrsrJirqcQRWSs2g6VvNvu2YkY0o5i\nwkiTWZY0dRwHFg8z/SeuayOCq4yDmMdgYLDUdOsofs59fb2ouCH6bCL6JifFijPuq2FykhYirVYL\nG93daIzSanJubi6tN+veXkT0FbmWFxHCUh5vk3U6G6v5+xCLYtaT/19QkolyxQSiBcf5kZa0e3BS\nNjplAwMDg12EPfgdMTAwMNgBjE555/joI91OOUwigd26RVumtTURSe3p06pWdmlJEHHr62T32emI\n43Z7FGrKXrld8/2J3LWi6IhWL0WGI6JPxtn1PA6VzPB9J7levyIrJe1S3EgBtFqS6COb1pUVsV2e\nrtR1om81IfqaOtHnNB3cWdP7QW6ds0SfZVk5oi91yW5mYi8z4FnHwScF7ts3m/kYywBwc6mA6JvL\nEH3SrXsHRJ/E1COd6APyhJ5UheTkrID8S/TPd44DtkLUMc4xhRjgeS/GqUyqZg6OG+DQSUHRiEdW\nBIcpOnArxh0nhhq0eH1QqDKe9+jPbuP0EWxN6ORWfEiEBAhWjiOe08t7I3pmaCDJDp0hADnnhWVj\nHsO/MQ50smFbgSAYAXBWrzdD6MmOzxN9gOdZUP3xtyf6LLTbI5pM2je3Wrr8lRJ9e3DZ+VqafPVq\nWfu93SZd4vvvi5fryRN6Q0+coOPbt4kQGBwUx1K3DISo1chcQzWWr1SE66rnKZmfXSIzVJ1yqSRi\n4lKM5F5UqxRkQI2d3N09m/ykyOQDAxSMQiX6xseFU8DQkCT6mjheIfKur49iCLzdRzNltUu8pOeH\niRRU86pd2EdEn+M4QABc7KEAFaoe72KvIrcYPlnVSUFVh6vKUwwWy9WYzmrYR+lSrZJ/KqGXIkP0\nyQn46jsF7tvQCUB5f2pZ2YZSHbisaOksZgM8xJUCnTIAjRSMEQOItfPjpGwltvGeQgAKMizE+YDq\nfbpEz/aYcty5KdyPGzfJDbmV6JTdSj+sJzQuJapP9IzTclJVCUCpB86WjaIICN9EpULu0PSMzmoE\noJSr5J/qXKMTfRyC6FMJPaaUJbkMpVCvP1Jk1H/d3Y/T42vX/jGA316iz+iUDQwMfrpwXvL/C8AY\n+z3G2B3G2H3G2J8V/P0gY+zfM8a+YoxdZ4z9k500+TcKwbLrMrKSAHxfqBckG91ssvQYoJWusKgQ\nx2nAbsaU4EZApyNW2GEYodPJr+7UdsgvvGDVE/Mkh1x1VXaYXFHpuOh8UUfeJVtabNi2Bdf9bvdt\nAHAdF7Zlw3VITeAk59m2DbdEctuyRYZiNWtw0hxmMQpOBLHFtyw9m7FcgVm2lbZTrcOyrfR60qoj\nF2BeWVlJd+80KD+3C60AsvJyuSzqdfNtsx2GcoXWE2EQ5qwhyKpDX2EzxgCuWwEojdVdvcMYscXT\nKGmiDbIzdZsD23ZgWbE2/vbvFyqKuUqM/S6pqZrNJp709uLQYVKVbWwIFcCW7aKsmFxubGwUZrNW\nXfklvo+lhrzNrJt0UeB6SmrAU/WflGfbJvsvimLNGobzvKUHY+TqvTNrj90FxpgN4F8B+F2IeH2f\nMcb+hnN+Syn2zwH835zz/40xdgrA3wKY+K569+Di3sDAwGAH+PGJvgsA7nPOHwIAY+zfAPh9AOqk\nzAHIL3IPoOQQ2wZmUjYwMPhp4sfXKY8BmFZ+fwbg/UyZ/xnA/8sY+28hAqr/oxdV+prcrHVVguTe\nVJfq2Vmx9VPdqQFga0sQas3mWCqTWyrB7qoJMQWplbW0KJLFsWSj89YX7XYMNTq83Ca3Wqr1hSD/\n1teVVMQAWi0hn5+n7ebyskEXTnsAACAASURBVNjCPXmzBmyRJ2AlEpYU9zaUQOkA3A0X367o5Kgk\nzm4t6dtYxhhuuq5mfSFxczPvDj3dtvHxii4DkmD2BZhasMn6QlpDzOhlpcpCtb6QKJIBwI3HjmZ9\nYdsWrt/VKQ/Ztm/u6KqHOLYxda+4vXePAzZT1A9xiKkkOajaYgA5q4zI4onrtar+SKwvWATH0lUK\nt23997AiLnKvBKgXXB7tw/ygPk48W1hNtBcm4Y2S9YU34MHfr7tTA0Bo2znriyLXa0CorbxvxoCW\n4s2ZdGEQjKDVeieVC4uKvDs1APj+sZxcWCIp2RASpY7vj2llLcuC5+kWGZLoy1pl7DLri0HGmBqg\n+i8553/5Pc7/IwB/zTn/c8bYJQD/B2PsDN8uNCFem5u1PsFsbNAkfV4kssVXX1H6hPFxOp6fn0+P\ne3uFeydZVATo7r6X/j0MyYLBcfKMtipTdbvlsrC+qFbly9FArfZcOY8mt+5uoe9uNOglGxxcUY5p\nsjh4ULRzeDjZzfRu4WSN7l111T47QEHupVu36k6t6lovjpJFhW2JDB6aK7Qyh6mu0xaz8PEKcKU/\nHxMBAK4OKJOMrGOYgtyrXofSnRrQdcqXjxS4ZBfIMKPLpYWL6jqttu3n5+naYSA+ympAfIlSHbis\nWEk4tgPEwFWrwPqCh7iqWGX4cQBYHJdiNdmsOK5wGxdiK1fFeyF9JDsd2fYYZ5WMJvdmxLg8NEPj\nc+0bEQS/avejPEMB8aWuufzoE/2+Ep2yan1R5HoNyADzpzXLCTkpt1rvFFhUQLPIUPW9qgWHkI+g\nXKZ3TtXJVyokl/ps1SJDfedUq4xr1/4TAK/A+gJ4FeqLJc75+W3+9hzAAeX38USm4p8B+D0A4Jx/\nwhirQKQmWsA2+I1OyoKIszPxV4HFRZFNZGurhsVFYTok48uGYZAeA2o2aiIjpGu2cNPO22LqJBBP\nZDrBIQkakaHaSa8BSJKCJoEiUk8nG2kkFJF32xF628mZJVglNd4FT9vGtckxHYRKF0ubXcaYFj+i\nKJv1du7iKVmoyKXNLrMyMZJj6h8Zd0OutoTb8nfXC4gJJucWnhSOIweBn/9gqDGk08mB6Z0Rx7HI\nnqxMNDKmNcsQgNVKBW4UoFrK22w7to+yTfIiInk7d/rJyUlsVoHJKu205BiPVwcw+sYbqfz69esI\nMzG60/vYIUHGkzTxKuEp06KFYQTPo3fGti1wHmvhCmhc6oR3GPICorDYFV4sDLlmXhcrY1h9v/YQ\nPgNwjDF2GGIy/kMA/zRT5imA3wHw14yxkxBJyxbxHTA6ZQMDg58mfmSdMuc8ZIz9KYC/h1gO/RXn\n/CZj7H8B8Dnn/G8A/A8A/nfG2H8PsSL8b/gLIv2bSdnAwOCnid+A8wjn/G8hzNxU2f+kHN8CcOX7\n1Pl63Kyv92q/L68I0u1JewB4LsJerrRFXOIV9wjQ3peWbSeplLfqJwAIeeiKrVgHh4EW1S3VGmF4\nGoBOGAoZhcqMkzCMvn8yLUuZeU8BoHCevi/Kbm2dASD0z54nSLq1tTcAUPjQrS1B2s3NHYTYyQCL\ni0JH/Cg6CqySakZGortztwrQDha2Y+Pbb8uA4kErt8O3bpUAhduxLAs3P3sInFU83pLt+41frwMX\nerQ6nrYtfFSNNRkATP1qFXifPAylBmDqw1vAO4lcEn1fTAPvkmpNLgSmvpwGzqkqt3zZVP7JCnBG\nkTNg6ut5YGGfIkra9vUcsKCTQ1NfzwHzI9r5AHDj78cQ/acUz5gxhm++suGrCVmTe/76ywr8c3pf\nfPVFGX5BSNBvbvajdZ5UKGFYwjfXXWy8Rf0eRoKTuHGjgo0zpPfnMcfNW1VsnKJnv7AgSLun+w/C\nGyCir3Wqgs6BE4DueS9cqg+e1OScc/gHT+XKMsbgPX4DeEIqkMgS9xSV9sOz6ASLMfjl01CzrFuJ\n7rxTOgXEJI9ZDD8uAR015Kp49oIwp/sIQwued0iTyfer3T6oyT/8UEnF/jLYox59r8nNWo/XcO9+\n8hDKNZyaFMf37iWWJmt17OtVYtFKl+pODT0VMfm1W8ng7tjosm+nZWWeP6BaECNZl5HOrpq6ZJNe\ntx9dXeRmTWE8x9BoCOKxp0dOdk0MD1NwiKEhqXcMMTEhdHfDw8mHY7qN092kXkqJvnng3SEyRShX\nysC8nrU61cvOAxf30wvvuA5wL9CIvlRX2wi12MmWZeGjj9Zx9WpPvmxPjA+G8sQZ9sX44CjlOQQA\nzEXF2awVuSpTScEUc1HedboZaa7TqV52K9LiKRfJ0rL3s27WFiJYuKLo3KXeO2IMVy2VO7AQWcAH\nBWRRBOASFFIv6sCLHbyndJnniYnPCxjOeapLdgTPB96hx4YbTwTv4zWqOFx+kso3n14HSvl4ynEc\nAyXdpVrKskSfZVlApJN3csHiRZdQtsm4wLZsICyh4hRkqPZL6CoRKRiGIRCMouIQoRel4V4dlMu0\nOBGknqPFXibC3P1x4invUezB74iBgYHBDmGixH03PM/Dw4cPsbqqR8iSZj+e15Met7bEKjfwg/RY\n1gEkqw15nDDFRZl8XwZy9ex5OvstzbVs206P5erZcfSA+EVlU0sNS7fU2BY88xPQo5Yw9TD5pwbP\n51SByjEUMfjknlzcl0Xy7evIWwdkg9lvV5Yxtq11QVwQyL1IJu9RteCwmCWsOhQX4DhJ6xTFNgLF\njdiyLESxhSBULAaSlWAY2fA8PSJhHFtaG2TGmJJrodalu72XyxYaDbLeOHToEABgpacHhw4eSuXL\ny8uYa3RjZEy3+338+HFuvNu2nbeaSduWeW7bJCIoyoidusrHEYJQ3+Vw6OEKtstOHsc8Z8W0XdKC\nVwajvjAwMDDYRTCTsoGBgcEug1Ff7Ayf39Dp4dVVwbrPLA6nsrXEnXqjo7tDe6FQWbSj46lMqi/8\n4CCgJHmUCR/DMB/4Oysj6wul3khsL1utYwBoq9lui27b3KSsv62WUFksL+uWBWtrwtLi+XOyAJCe\ngo/WewDFubFcEr/ceaQHObcdG9/e170gU+uL+7pTgW3ZuHHLB7wNZHHjRisjYZie9vDxx2qQcvFz\naqqYAZ+aWoXqci5kui28VEncuJF3ly2SCbkPtY8Bhhs31rYpm5dvW3bzAFCnehlj+SzZ0uKkQH79\nnq4K4Enq66lpW3vh45jhxiP9dXISh5pvHjBk0mTjm/u6TGZBvz9Y11zA5/adwErfwdx9dcoj8A/o\nLtUWs+CNbxPk/u4pNf5++owifgBeRnMQ8NNaG1hyz36s1wEAfuACwTqy8P1D2u+MMfi+fh9k3aS/\nMx9+mK/vtwmvZVI+f0Z/qR8+IuuKyXFx/MgnNra/Ru7QGzFNIDVHZO0NeKLnctuolr5I/64HtNfZ\n66xM1RlXKqIOylpdRXc3tYHcr4H+fiFXXaRHR4l1HhwcTI+PHn2WnJOY5z0F3jxGma/VQPnvnlGs\nLxJd9PtvK9YXigfdxbNE47uOC2yUcPldPQOKxOXLJGeM4eOPN3Dlii6TuHKlB3n0FcqvXCGdpxaM\n/srYDsuu4/Jl3XRNlB1CEYrkhWUf2rjydj4j9tW3FT2z0peqq7acNH52Lq9TRgn44E0qGyYLgCtn\n6FrlkqzXws/eVme5vOz5s2QiqgJnLZqU+LywJhqZJ6siAOg8fgwAqNwhSwvJT1TvFQS57wAVh8rK\n+/BioGzpLtzIyNL+CfU6AADuGCo2uYWrz75cpmBpsi8rFSqreq12dVHgm2vXRMye39Yg9y9sMmPs\nrwD8ZwAWOOdnElk/gP8LIi7oYwD/Bed8dbs6JFqtFr788kvMzp7T5MvLYmJqtwfT4+aWmLj9wE+P\nASX2Mo/gx+JYI4u4ThYlRxoBIX++yL1YEkTbxYxVyQw5qdsZl9giuXx5LGZpRF96HxlCbrssxek9\nK1mnQxYWxt8tug8hi1LzKPXeRDzcvOlakTyKosKyxdfbvm158k4vK/sk22YZ/1fNNKO2zffUQDwM\nUci0D7Z83lFYhqe4S1u2hSgqaW7I1Uo1OYfBcVQ3fRuObSkTseqeDDgOyTteJ+dCLj/U1WoJ/f00\nJo4ePQrf7cfRbj1I0PLyMniprH3IO51OIdHn+77oozD/wcmSwnEc57KTb/ceaDG7E6hhqtXjIlJZ\nunJn3bpfGfbopLyTzCN/jSSghoI/A/APnPNjAP4h+d3AwMBg90DGU36Z/68BL5yUOef/AcBKRvz7\nAP51cvyvAfzBK26XgYGBwW8lfujifh/nXMbTnIP0d94h7jzO2ClvCnvO5Q1S+DcDEXu1HR7XyoZJ\nvFsfp1L7SmlH6YeHgFB1+UxsSkOKO0txZPVYtFEkPoueR/7N5AZ6HCoJFYZCx7uxQSRkpyP0z4uL\nug51eVnIp6fJpVvaMT9Y69aIPhmO8+4jPRiybdm4/VD3gpQR47IEoGVZuHU7BDxdbw8At261c7Jn\nz3x8+qlalm1bVsjXkU07fetW9pu9vXz7siGAUkaWJXx4ItdJTM7zsrSO1hGgTn3HwHDrUT4GNQDc\nfJTPyn3jQYa8S1QW3zxl+kqKsxyhJ7UIX9+HhjByMPVQX4ZFUdKGt1xA4VjX3GE8sfuQxcbEOWyN\n6PGNwzBEZ+xErmwYhggeFJN3IR8Hokt0G5wjgF5Wvl8hzmjyMLR2TPQVyYJAtMHzdALwlRF9e1R9\n8dJN5pxzJiN/F4Ax9scA/hggvdnxiVmtzLPn5MK8v18o/HmHsqbUXXID7UQJqcWBCvtUtkHInDYq\nDpVV9V+l0q9lexTZZ8oxvajVqnAxJZ1ZFbUauZc2GkSMSaJvaIhIpgMHKGasSvQdPy7uO3XJfgy8\ndZwmKZVAfPc0TXwyV957b9HbquqiVQLQdmxg3cHFs5kACAkuXtTln37a1GRq/1y6VFRHT6H80qX9\nBWWL5cVlN3Dp0kBBWZKpes6LF/Pyixf1+CYAgCcMF0/nM3tfVGJRqDrYS2/qOmUAuPyWqlNO+r0E\n/PztrBOMTt6peuRrZ6lJHU+My6tv0vgMklCa6AUu1+h6j5eE+/WpQA+/u/lYjNHGY3KH7nTEPXXd\n10ntTqcDtIGS9cv8PUeXULaJ1IvjGIj1smlI1IzccZwc0ad6oshwBQA5mKjknxoGtFolIvOVZbMG\n9uSk/EOzWc8zxvYDQPJz24DNnPO/5Jyf55yfV0kJAwMDgx8VcqX8I2az/jHwQy/7NwD+awD/Mvn5\n/+zkpHa7jampKcwv6Fv8zQ2xKvQ8Lz3ejvEtslDQ3DW3z7ICYPsg7hSkniwi5Oq507EzJnN5l2pp\nPue6rmJKR+ZsjuOkxxoUhpqyeuuWBGEYIghLWrB/ueILfAdbW7SC5pyj0+lgfX09V9bzAmxs6Jk8\nfN9Hs5lPdRUEvlYvWaRQ0oHUakFxeVevV2QRkZXJsiJBQaCVC8MwXf3JfhD9FGht830fnU4Ha2tk\nqyzram2NYHFRz8DcbA5ibi5vL725OYiZGUXOgI2NQTx7RjJpUre6MoAHD8icsVarobnVjfl52uFU\nqmJstNpVLK/QsxNplLrQbJLdeE9D7J4cx0JFydR9eOIwZpslHK7rKcJmZ2cx3dODAwdp6z81NYVQ\nyfKu3nP23ZBBmBDryRMYmMjqXZBQIQee/Ie6Y0DhcbH1BUv740dzs96DziMvXCkzxv5PAJ8AOM4Y\ne8YY+2cQk/HvMsbuQSQC/Jc/bjMNDAwMfjvwwpUy5/yPtvnT77zithgYGBi8Ovy2En0/BM8WdUN4\nuR3eaCvWDAmh14kzVhJIXKqVyO4yV1wQTQBBXtWhWl/IfGKqO7UoI7qi06G2eZ4MZn8UqvWF74tt\n6eoqsckymP3srG6IIsm7x4/J408SiA/WukXGrgRyK3//qU6kMcZw/0lGlug97j3Rt7UcHPcfLgCe\n6uwift67pxvoM8YwOxvhyy/z6oQ7d4JcWSFvQrpZS9nt28UuzkXyrEzW8e23EdQ+jmOeXAuKTGxx\n797V3cWjKML9+51MWXGvD6MKUNdJwUdzRZ6KyMtZXib7/eFqQ9sauyUXd5/rVjPyOX/7NK+2ysrK\nZbFpvX7aAhTjgygs4UY7/5pO901ioVvPDu2dqCM4eDpXlscc4aMzejS4MFFHxePohBepLOfCzVoN\nKMe3sb6ABT90gfDF1heccwTBhCYLQ1ZY9pW6WZtJeWcYH9JthFaWyQJhoCYCz68G5CDYZRObHMQ0\nWVQgrC9SXZndRtkiiwpVTyWtL1SrhXL5c+WYXpJa7auMrIpGgwLiqy7Vw8OCTd63jybjI0eepsd9\nfWTOdOqU4EPT0J6PdeuLVM8H4J0TNHlJ3e3Zk3k9MQCcPaW45XIOrMc4e8opLnuWJj7LsvDllz7O\nnStpMol33y0XyOs4f76SK/vee3kXaQC4cIHimRTJqOwWLlygvpLefe+9R5Oiyi28+y6RxlJH/c47\nNCmm+unFDt48TLpfOSbOTBTH4NDkLC9LkwuUgDcP6jplAHh3Mq9TBoD3T+g6ZQC4cFzVKSfPpRf4\nWQ+NW+lNeLmu6+Z/uSosfA6skqXP2m0xRsu3dbfpKIqAFuCyj1OZmwSY74QXdffrOAYi5C0ygLz1\nhe0AzhgqTt7KAtAtLWQdpdJNOl+xvlDdr19ZNus9qlP+jcdTfvToEdZW9dVSxxOrnDAM02MthvAL\nEt1uF5e1KI7wdhmGiwhAOXm2WnqM5KLM1duRdJJ86nQa6bFsy2bTxewsmQdKd+n1dYanT2liF/Uc\nwuPHlJFCtj0rdxwHm5stPH9Omc5ldu7NzQpmZ2lFWSqVsLXlYnGRbHzLZUluWlhba2tl5X02m2F6\nLUBMgJTlBZqb+otIQYksqef7fo5slHV1OgHW1mgpt7W1hVaLpZnQAaDZFMcb3gSePadJtdPpYHXd\nxsNHD7VrA8DyJsPdgOKW8JhjqQnc6VBcBhn8aiE4iRstmkjqtToWNyZxs0OTZLkiPmoLK4dwI6Rn\n1NPowcb6CJ5Nz6WyVr/ov6bTg9lZ+sh2d3eLOM8ZN/YjR46giT4c6aPd5crKCpa6GxjMxF6enhbx\nZHLu1PjuWNgScncgY3WrdeTPp3r0+Nj6T72sPpm/MuxR9cUPNYkzMDAwMPgRsAe/IwYGBgY7wB5d\nKb+WJi81z2i/y63Zlk9uozIUYoef0EiHIqIvtmSKnkkgUO0dJdF3CnJTIN2pff8E1I2CJPra7WOp\nPAjEln0jOAK0SBe7GYrjleBgSsqsdsRWdb61X3OlcRLVwczmMDAjWyXaNftfDgH7la1fYg86d2gI\neKLbbWZlcis6e3AQeKrbHq//dzHmHqs6ZXE/W8f6MXNP0WHbNtpLNqYHqYOlnm/tf+zG4yebWlkA\nmF7dBK6vJtcS592/bwHI2ynfu8eAJPu4lN29CwB5F+67d2MApAIR5F2k1RsE4noiamWkyG08e2ZB\nZaF8XxCscwMDgEe68TAKsVge08aU5CSWqwc0VRkHx0pVdwGWpPLKmYOavnK1VMJCfVQLNW0nfTl3\ndES75Uq5gqf7+rU2SEJ45u0ANcWxsVTyMFtrY2pL39S2+2ys9LfwYIUa0a4egHWsC+17enzi0kYD\n4f6jULXSqS05PwCPacURDJwGlhVB0ifB4GlAVcUzIHjYByzmo/4FwTEAte+UyTb4vi7/8MN8fT8Y\nRqe8MwzWb2i/t9oK4VERJFs7TkZxlCH6wjzRF8bJQ7Q9lBiVJb0YS2MnS5dlgKFSIaKPdMYM9bpw\nqU49EFsV9A8QaSFJHTjAyKBwD210N1LZoVGKBS31inCBIwef6u0ajnFklHTHqQ5ugONwoOuUs7JU\nPzjAcTgkueM4mBvpwaStuF5LZ5gxH4eg65QfjtRxZI5IVWkF4A5xvFHnSlkh9yfLONnXSK8l0MQ7\n7ygp6VMCcBNnz3ZnZBs4d64o1nMb585RHb4fAGB4+21yPSfnmRCnT9PQ3doSY+KYEgqi2Uwm89IK\nDg3QPUuX47EqZWBOCUQP2F8m/TGPOeAD+0t5nTJKwD5X0SnX60AFOGApOuUyPfvDFV2njAg4YZNO\nWYYgqHUBZ21Fp9zVjVKZ4VxG6brcXoGLLpxUPmT+zA2s93fQM6MT6Z3pafitCmBRrHH5PLx+oLxC\npB7nHLB0Qg/0GmlyxhjgHEe5fFM5Xx65GqknhqurlbVSYrv04xF9e3ClbHTKBgYGBrsIv9HvSBiG\nWFxcxFZrKycHdFdbucXnyT8JLRMyMkxxJjg3McnIWV8wprPRRdiOoZYrNtW6QAaUabdG0kD9ahs2\nNnrx/JmwiJDmXhvrDUyDsq7Ia2xUe1PGHBCrms2uvoxFhVhlbNb6NAsOx3HQHLE0mdwdNHsrmJ+f\nT+XVahWtRhlLS7QnlS7inbqL1dVVrSwgLGhkxnG5u8haX8gVtGpRoVpkqFYW8p6DINTq8P0gkdHz\nlH8PAgtbW6TW2NzchOdVsLlJ9UqrDb/uo7lJOoVOpwM/8tEMSZa6b8NH0yc5BxeygGSyL7Pu/2tr\na+j06q7ecnxt9Q5iYY10WmEYolVuYNmjcSLfifXxBqZX6dnXajWsjfTiyZxusdTb2wvLsrRA85OT\nk3jc14+JyUmt7MrKCrwNF6UuUhHI/skmSYjjWCQcUALib5dxPYxCxDxGqJSV95x9Z1zXyYU24Knb\nN1eOXyH26Ep5DzbZwMDAYAcwk7KBgYHBLoMh+naGDU/P0Se3OWpAe7nF9/hJnSlPGPZC64t4MuNm\nLetSXLJ5Pms1AASBtL4gN2vfF1vVzfgI4FJXyS3YevMwyRILh7XmhFavVLGoZaWVxXrPIeBYXt2y\nceAwVDDGsD6ekSXu4utj+vUsy0J0oIFSmbh2GRd4/cCIVtZ1XDT7ujF3hJwN5PZ8YbhXKysD8D/b\nWEJwRzwQxxEqhEePdMcGyxK/P3yYd99+8EB3HJH3/PAhoFIcURTh8eMYavrkIBB/f/ZMDybveRXM\nz+uB64NAPOflsWHAo/jNYRRijU8Ujql16H3MwbEBPZu6nVjvrJUngExY6bX6hC5gxfLNchXzrh5T\nWlrpNHtslGpKwt+Si5n+fPzqSqWCx3X9nlvuAOYG8ySq/96b8H75BoIGOUD51cTZqesA/MHLqZxz\njqjnTe38KBnbQY/uwh3zGNGzYSBQoxeKn2GoB+CPIgu+r4dXSNuSkX/4YTbr+g+EWSnvHI3yl9rv\nqm5OBrQPkLzoWesLxc26DMEap9YXlgfXpUy+qn7ZdYWlhupOrVpfqPJ6XViApFYW7TL6ulX3UOq2\ngR7h2ipfKgAY6lPZaGrDUK+QpwlC12MM3CNLFFUH13+X3LrlR0Atq+r5hu6rgcMdNHvG0PeQPNbI\n4gQYvENWANVqFXNHxjDykHTVatjRA9MLWlkA2GpEOHJcXLtSoT47fZqO1f55802ZaJQm0bfeomvQ\nPYd4802aZIT1RYhTirt4qyUneQvHjlFfSV3yoUN5nTK6FrC/TB6LHd4BImDIpmekjr8BUL/LD6oq\nc+2kLz1gKKQ6JIbWVIsD4iyG1+gZ9VvC0uKQR1Y6FSYmzLn1Bg6sUL/LMThZoFMGgNNrdM+Li0JH\nPTGzrJVd/GwK5aUelDboPiB17oOXUVoiiwr5PNxFcslWx1ppmcpGcQTEJ+G69D6r9+y6XynH4jlW\nKt+kMj3zNSWRuHbtPwbwioLc70Hswe+IgYGBwQ5gVsovRhzH6HQ6uRTzcuWoppmXP2X6eLUOQBjx\nvyigvfzCRxHFqNguyH0Rtgu0L9ugxrkIWZieo1oXyC1sFEXwfC8RUWB39d62swZhjAEZa5HUiiQT\nw8PzPEShHl9CXiPXNgi778Lg+Rl52idBiHZb1CFXOkEQo91WmXY3dz3Z/+G2bYPWtiAIEYaA56lO\nIkFyjoNAUVNFUZQbJ9vBtm0wzrTVn1QFWaGVBuoBRN86oYOykw/MlLV8cBxHS3oA0O5io1LRgljV\n63WUWAl1l9QSsj2OrV8vCALEUZyLfbGysoJ2uQ8rK6taHcxiOWuJ4eFh+Bs19O2jQFDTT4WFR5i5\nj06nk7OckE4wYNCSMsRRDB7zNCKf6BdRlmcsoRizwBhLHZnEvYlxkH2/XimMTtnAwMBgl8CslHeO\nZnBe+11+lTvxiZTXkatgNWs1AMQssWtlRDpwK3GnzhB96aovOJnKKGu1TvTJ2Mkq0dfpCFmTH9WI\nPllvUykrV7+bbd1GVK4sNlsZOYDN3gmN6JN15Ig+i2F9TJelxOKYHos2jmNgohduRUkAmqzumhN6\n9DDHcdAa6MWS0hVylbuyf1ArK1eQs60m/AdWcr54FtPTHKqLs22LVd2TJ+ouQLpI6ys+aZ/65Imt\n1RFFgGKqDYBc4Wdm9OVPEHRhYaGcKSv001miL4ojrEb5WL8AsBZPqLwiGBhW40O6LHn2K6WDgJJy\n0rIs4aatQJKjCyU97nGZlfEcQ9qq0+IJGdsNuA1lN8NRSN4xi2G2P5/zski2WjmC9bmDCGxaxXf6\nxVgIq+Po9FM85TAMEfe+qd4yeLLyDho60RdFEeLZYYQhEXNyJRxFOtHHuQ3fn8ydL66plzVE32uA\nmp0aUIivEKg5Ih5yul1TslYDQMiVDNVckA7pVitD9KnqCRlPWc9aTW6nKhkmib6U/PPK6KnliTcA\n6E1csi1lW9bXTWSG+uJJeRr+cC1G/x2qV1VDqESf3I4O3ruZkwHA0AMikcIwRKfnEBr3yI1Y3Z72\n3iQ34EqlgqXjOvmnEn37H1JG8ZTo6/JxYDJOzpd9FuP4cbp/tS9PnnRz7T19mp6BqnI4eVLd2opr\nHFc+GJ0OPfvJSTre2hIv8YEDLaVsMrFliD45rvY55NabqsFCYFiJDczAcrL02fvAvg2qQ/bx/ia5\nZKvZyQ92iHhtlBoAA45xxRko2fY/36zhcJPik8gPRpa8k/15ZHYVWWRlDx8+xFazB30RtcFbEV+8\nTv9FVFbo/ep0OggB7CuRHQAAIABJREFUOAsfpTK3RM9TJfoCP0AYnoLjqO7b9JxVAlC+S5XK9VTm\n+15h2WvX/hEAQ/QZGBgY/LRgVso/HGm2XE7HKaEHndBLXacZBa7fjrwjd18iM7YrW+R+nbpQx6FG\neslVTRiE6CSkl6w/G+RebmFV8iRdNWZ4vXSlnCH1ijMBJ2RjHGkkkOu6ORIqJTmVTN3bISVYY504\nKyI9pd1wHLM0gpteFxFUsr1xpr0ktzR33TAME1msyaisTvRlSVONPI51ojgXmH0bN375N1Umd1q2\nrWc4L5fLcFxHWx1Lc7aSVULNJhfnIAgQ2zGCiPqhWqlSvY5eb7lcRqOhqzA2Nzdz91Gr1eA6rtYG\nABgaGsLqTA1Dg5QdRrrbB7aNUpmu53lejjze7lj0C8/12U6xHZH+KsEN0WdgYGCwO8AZEO3BGc5E\niTMwMDDYRdgd1hdJlCo1oH1RMHtAcalmZ9JPiiTOguiIMHhNECYZe1WXaqmy6HTe0OqVctX6Ik5U\nKR37OKAkeZSkXrug3i1PZ5Kli7NmqZFsATd7J4CjPCffyLhUbycrktuWjfhgj259kbR385Du2mvZ\nVs76QnomrowNaWWlOmS+04H/yElkor0ieJ2a7zBvlWElFjJPn+qu03Lr+/SprsuJIgvPn+trBmlR\nMTfnavIgYFhcrGbKCmJpxR0BfLrvOI6FlUUBiuRZmdsR115yxrUY7rZj56wsSpZo73NL70vOOGZs\nPaFsOWnvalcMt4+sLxzbwdMe/d4AwOt2MTegqzRKbgnTBWW3qhbmbw7B75CFylZDlAvKY9hSqgnL\nPqJe3c06TsZwzvoijBDPDQMRqfbi+PtYX0jVlm4J9SqtL/biSnlXWF+E8iVVXKr9mPSy0p0aUIKM\nW0ApFkxwqueyPZQscslW9arSpVqVdXV9WVhWBrlPdZRxGTXFNVzNOl0vqLeh1quY0klLjVSvm7G+\nUHXcA3f1RADbybJy13XR6jmA3gdkZaHqkfu+1d2vs9YXqrv5vgfP0mPpFLFV6WDscJiUle1lOKp8\nXFxXyskqg9oQ4sQJ6hPSiTLN0kJaX6ju1J0OjYnDh+lYhvQcH99SyiYTW2UOIyUKGh8mJpPDtpKB\nWdEpq+7X8mOvlpW6X4TA6BYlWZX9plpZqHrkyTgfovVIRMkJGo6YGZ+2KjjqU3tlvceXlZQmEDpl\nADg8Q5YaUof9xtKmVnZhYQFbYQ/GKhRUf2tDjJmtBlDbUDLAb4hzncVi6ws1IL7X8YDwFGyb3mdb\nCTfwIuuLON5SzqM6rl37xwBe3vqCMyC0X1YZ8COEFH0B9uB3xMDAwODF4Iwhcl52ivNfXOQV4zc6\nKUuLh6w7sVz9xpyY8iIrC1WuBrSXX+HIttMtI0A2t3FcEul6FPi+7hIrVy+qVcbAgEiWtrBZw/AQ\nbTf7+voAAE9n+nFwVKglZOD3gFfT1D4A2cU2O066yqp2iZ+tcgU9PT1Km8QAcGxHW7GqbskSaaD9\nQLcMabfbiJRA9ACx3N6hfQgXF1N5o9GA7/toNmkVJo9bo/1asH6ZGksEuRcruXq9O7lHF+12kCvr\nOD4qlZLWD1kUJSLYDpRcwNLu2fM8RFFF6yd5/15J7wvGGEIWoq1ENkvdxa0AbZ/kpVJJWAYo6hZ5\njTAMteu1Wi10ejtYXSMb4YUFEVhodaCOR8sUfAgA1gYaeLJMOxRpybF1aAx31sjWuVKpYPmNQ7h7\n94l2vuu6aPVWtAQFS0tLWHPH8eTJM62s4zg5K52JQxMAgOdxL8b6JlL57du3EduWZmsux2XWsqhS\nqcBzHJSV90gGgorjEJyr45YnfUaqGdcV98y5nR6/akQvsDbajTBEn4GBgcEuAvuhNoY/BLVajZ84\ncQJ/9Ic64SRXcpfeXcAnX4gVqVy5Xj6/iF9+TkSJJN+uXljCR78WrsBSn3v51iw++TWVlV/795wZ\nfBbqJExWJvvhgjuLXweifZVkZfvO7z/F1zYRatIO9OTBO/j2qVCEylXTW5MPcf0BxeCVeumzbzzB\nV3cPae369A8+wFRnMlc2OtwD+9G6Ig/Bj/aD3Sf9oQzIYx8fQnSHVr8A8CftvwF/QN54si8vdM/j\n15v7Unm5XIY3PIDygu4tBgDvlJ/ha2+cypbEyv3flk+ja1m0Ta7uGifa2LhdYJ87sQr/cV/SBnFv\nlSPr6Dyk3YF8nv8Q/g7aD1R5jOd9YxhbJa83qSde3HcYQ/O08gzDECujR9GvJAyVZf+jP3iO7gXd\nX3v07QAz3+hkoZD7mPmGVmy2bWPkTAdzN2glKPmErvMMC4/J+5HHMfqOR1i9QyuzKOn3gRMxlm/r\n65+sTOrc+94NsUGZvOA4DmoHImxN6ys+y7ZQHQvQfq7fx1Z/A7WVDb2sZeGd0nW0pqi9Mt3TBu9H\ng9G4WlpawjvvbeLrz8hdW+5ez11o4ctfUx22beOXz/4rfP2hEqc5SYuGA2eB6a+0stHY27Cfk7er\n3DGHo2/BmSFd85XLIr7zL/5F7QvOuW4V8D3wznmb/9vPu15c8DswxJov1YYfgteiU+52v9B+70Ti\nBSqzNqpMvGxB4k7twkOJ01ZevtxOHKAUiwFZscSgKLttVKtEnkj1RY1toMHV3Oh5mZy4uqxNdMdi\n29nXKyaU3sYChsu0rZXqi32Ds9gKRRvkFrm/Zx77BmjbJreMPfVFDPUJ1YCc1Adah7F/mhwb5Naw\nXRlFVXFx9jwPQfkg3Lt0b+n2vXIEuEXkEgCU44dgX5FMfvTc0SbKM4r6oruBNwc+xdSyktM+0SzV\nBpbRWKZ77k5UFf/kWgd3y+KjVa+LwqWREP0d2hoPDycqiyEHbk1XX0QjNuwSDTv5Ibq7ATBlNIZh\nDFRiHBskomV1NSGGejsYdzOkXv8WRmL6kK2vi+NuZxq9sT4RdPMS+jhtw+UHuR6X0RvTsys7JfQw\nJ40ACNCW2/XrYOu0oImiCPVmBc6aGulO3HNjowtY1i0KsjL5gavM1mDdojoqlSpKcFG9q6t/XNeB\nDRuN+7rTjn3URpSROY6L4SPz4Mr83YnFNd47toLn90jdtrFyB+6GhdIK9XuQjEt7zYWzQO0olctw\n+UWUy6qDT6K+sKqwLCIQXbcEOFWN/EuJbbeKUokm8NTN+l/gpcDBEO7BMHGG6DMwMPjJItqDU9xv\nvMVFRF8h2aMQelBULE6y9bfsiI63cZ1OV2d2lLq0ymvHdowwohWQVIGodXQ3xOqwXF5PySsAqcur\n6v4qt5+Vynq6klbbUK02U7lUX5RKJa1euVKOS2VNXq1WsVmpoFuJyStVBFtdXagNDmp1lNtlVLrJ\n+FTGC65Wo5S8BMQKUyVXAaDdEqvjbBZoeRw3uyATZUv1zlB/GYvTtOt4kJjjjZzrwtyXwmxM3k+f\n42D1DmXUln2xbq1j/Qll1wiCAGsjNTyee5zKVlbENrt5eADBI1JfcM6xVR5DPEO7C7nyjKIIoUJw\nVapVsIy7uZ08b8e2UVZcp7nyn+qV489CqaSYRtZrYF0RqkNEKHclzygc6GD4GKnKGGMIBtrY9wZF\n7ZPqBL8Rom+cnqfneeDlGOVuPQre5uYmWKQTqM1mE/V2Dc3VbLb4CBNDTWzOkqmcH4ix1jPqY35e\nWf26LmwbKLl0b07SV67LUK3q0RKtTPxmuTv1XBdlJbgV5xxRpt9/bNUpB0O0B1fKhugzMDAw2EXY\ne2t7AwMDgx1gr66UX8ukfO4t3eNIbsFOHSfyRRJvp0/oBIfciqtl7SR78omZDqCQGVJVcdzOpzs6\nbumpjqQr8jFspWRXY0PYe45VFwHFeKNaFdYKg3WyB/Vroj0jfeQ1pd7HaD8lw5TqET7MsNJFqg5J\nejXHeqAijmO0xvXs0lLl0DnYr8ujCIOPQhzqUywykvuZqOvJN8MwxL6uNt4aJPZdery9MVDs6vrs\nkIX9o2Jb7iSB73smdQsAmUig/xix8qWE3Os+rL8kti0a11kexPwQbdujOMJ6v+5C3u4Rz6w9orvl\nggPt/bqsk2yTqxPrGBkkyxDHcdFzJGPJkIyJRqZtHEBPRlYqJUkWDjCUlReelSKwEQ41TXZYEmRa\nNJh3QMjKZHTEaIgjVjawPIqBEYBnPMtKngvngP761v0aqofzbtZxzDE0GWMYNObl+BkYifDGWWpL\n4AOHT+rncy765/ApIBva8NOb42gPkxpGjvegX3fJBs/LpCdl2H9Gk3+o89YvBTMp7xBfXtezI0g3\nWQD41RfiRVZD+X3yGen5LEUn9ennomwp0UuyDeDXgW6yI/F5JHR9qj5bygDAkdQ/A77kQh873khM\nwtrA/RkyD1OdQ56vCh//NHsygMcLE+mxqvN7MCsyU0g9Khvk6F8gZwPVML/nAeloZV9036OJXa23\ndps+BL7vY6ntoLlKpoHyQwYAt9bICabT6eCtwRVcX6L7kTplAPhiNp/FIn4SY3ZW3KvUKQPA4jdk\ntaAGL5/7Ujzb7m56Fqs3VWsGaUGzhH2KY4u8v6E5cnuWOmUAqD8it1ypm6w9IrZf6pTbj1cx95Tu\nSTZ5aYr6z1Z4iOUbSlyOAlm9LnS7Fji8uzQBu/UKgAj8saKLrdFHyXlOx3IMujPUf1KnbCOE/Yw+\ncrEXgyMGe6xrGv1N0X7/rqpTFs+leSOvU16Ehc3rdD2pU37jrI+7X9H7tdUU9d2gXBGp2SLAMPWp\nHqvFbz5DdYEWJ+p7W54jl2z5jEpzv8zJAKA0S/JrR64AAF42xv1etb4wOmUDAwODXYRdlc2acwpU\nHkuLDPD0GABKSsB2yQrLv2a5XOnQEZUpg7K0soiZHlhbrqwYWKrKWFoUq9XRrRaWvLxNc1+5lbq5\nUmbnQFv5y7KqW66aDbsos3M26HdRNmvphu1lXLJt24Yb6IHO5TbRcfSyRyePYji+jTP7TqQyuVrf\nZ93D28MU6evmLbFiFdmPk0hpyb3XWn1YWqIVv+yL3o6N9XVhvy0D6DgH+zAzk09htNa3hqeK9QXn\nHF7XQfjPyXlkaEis/v2S7jY/PDyM6d4+HLDIEUf2VU/PKg4cpNx56+sbsG0LpVI+cLtls9SiBwC6\nu+uoVgP09yvpkJJxEpRs1Ou0+u3t7YNX2UK5l4IQSUuEZnkN9R5SP3m+B+4Empt/K0lpBaYHmC9X\nKggcH25Fd0PubjTQabRRGVNVMw5aw1s4eHpCK7u6uoqenlX0HqQ2PFACVqmo1+solbx0RwAodu5u\ngK4u6ot2pwOAQTWmSjOZW7bmqr2xsYE4DBErGcvlOMnKXxWETnnv0WZ7r8UGBgYGO4TRKe8Q59/J\n6ryEHmt8NMKl95LVZPIVPXNCX1U7tlhlnnyDVphyZXFypgOmcE5xUvaUS7paSbKdsPUvswvRhqMg\n21w7IayO9G0A5J2MalXoKMcGSQcqv/rjQ7rnoJQfGCJXZqnr/nDExnoXkVuS7MmSemCA11/DxjFV\nJO55q4AU/MS7ij+Z/V+RxYGq7k7diLdQxxJG4tupLLLEan2IPdeUW6V9wkPuV8f6sG9UrPB6OqIN\n+07pwZ7SlfIBWsXJZ5QtK3HLm0BnmVaO4IA/rsfSXqmJlefmoB6X16vVsFjXM3XL/nlr6Ft0KaSa\n1bHQPcGg3pxc6dUP6SRWqRSgMqaPPzsZU/FIBUwh9bzKFvx+nTyOk3HX7tHDboZRCL9PLyttqaMh\nDq6QaRxA3IgQjOvEYGxH8Pt1mWVZCGoBWvv094s3YnSNNFEH7eDshjg3S/QxAONHdXJd7uwG98c4\n8S79LQiBT2+MoT00jiyC2hiA96mOhgc+9JZGV6YhU4fe1uSviugz1hffA59/XdN+ly7Dl97z8Mn/\nz96bxVp2pedh39rjGe9w7nyr7q15YLGqmmQPZKtbasaOFEUJrAAxBEeA4QBG9BIBCZIYGR6cwMmD\n/OJAQPTSsZ0oSAxZUWKrYXciB4rYnZZINptTFWue7jzfe+ZxDysPa629/rXPKbLYLJJV1P4Jonb9\ntc7ea09rr/V/3/f/78iMb6T22F/8VC/dcmT5/dP3xEvPFFDTAN4hQB8NAbzVFy88zXtMQcGCq7ff\nhxjoPFsetwpca2owjAJ99zbFYEBBC+UDaL5g4O6GoHCoZR2fjjC+pQdxWmOOgnqMMTTOAWP39g2f\nsrH72h+GIb7d+AnuNkleDxLYudPUeUeWxpcwH9/GjkXCF6F8QS1gMybhi13ht+5VsbsrPhq1mg43\nrL45HL6gfouAjWtvDYcvwskV5O6Z4QsA8O9psKgyo8HLyqbOlTA7K8DLpZpekichif0BOnX9/NTr\nPQAWqjfjobYAUL2p+14ui/vUeTAcvohgG6CeClv4O8PhCwAoHZrhCwDI72kglcvwRYQQzoYpYAmO\nD+BumOELLctOhS/m2ijsmu9XvzpAByV0V7Wg6MEDMXCngT71Mbv7/nD44uLXA9x+l4YvIgyam8jv\n6xCTtleR39doYdBoIAZgbfxYn5sKXwCw1rX/9dPfA/A0gD5kQF9mmWWWWWafzb7QmTLnfCTQp2hu\njFkG5Q0QHFJKWRolqX6cWNOoaCy3KfiQlnunrdMVs5cgDNAZ6KWf2ke/308ALOVLg3cqVEErDyeV\nulPViB8nF7csa6gSdVKhekTu2/R+kxzAOV19GxBSba/voejrmZUCAv3AR9kdlpa3ibRcJWFK9/eV\nV14W1+RYF7PfPGNcH+t4C4uvaU6xun47wSzKL+oVxv379xE5Zs7rCSkz7+RyyTYgJNx+SppOc0Qz\nEg6wmACmLHLve0mOZBf9vl6eW5YFNwDabe0b9OWKYZBHsxmStjYwGaLf0KsdVQosjEL0SB5h3/cx\nSFXDVs8i9zrIExCz1+shskJjhQeIJEFxFCXJggABMqfzawPAzPQ0CoUCStP6+qyvicx5thXBcynl\n1ILtRPBzeqbcrYn9RXGMINTXwnFsWBaDQ0qlLS0JUHXLncBiSfPMd3d30SiVMDY/n/j2JQUyTFVf\nf3qWAX2ZZZZZZs+MZTHlzDLLLLNnzLJB+QntW6+YyysV8KfSac4lc+KCiQTbtlgeXjw3zGtMsy9U\nHtwXPbrkkr8fYl+IY1P2haqcfX66A5CUw74v2p5a0Pl7VThheU6rzgC9LF2ePRpq++MFB40CUd49\nhlHBGBuSXiuVXmvBrGgcDMqYfNDHqTGdKV2pxU6WTZn1VP868uEuPbUk7DEemuWLLk2IpeaDhVlM\nLIpluSVZIrMpRoW7IO6vPUcqalti25ox731eJkVv7kxge1wvbdunJoek01vj4lwPx5YMfy1fwKZv\nVowe2OIeXZ25hTxlX/TZEMsilDmx0/Jr1wVKy4YrqdQdLDHk6Ovjh8C8mce4lxfPUpppEdjdIUaG\nuu69icCQWYdhiGBqWKbN4xjhTJjyMoQzw2W3Wl4L1sQBCtCA8Jmrok+VuQC4SvZgMSyeMt+NXk/0\n7eQFXZ1c2Z9fX0R7Sl+kLVfeI9u8R+2JY2iXzArXoSdzL09fAT2TjH3xJZhiTSijTIu3pMw6JkwE\nxcgAzGrL77wv0O0kppxiX9DY7ps9VU1XxyjfCXUsNe/qPin2RRjLR+UAeJcg5bSu3o1HYjCgcd1b\nq5o/R+PAd9YXjLbxdIixzU9mVKh4LZVeGxWqH+oBv91uo9r0MWholgW9DjeI/No9cQVTAA59XVKe\nxvv3XZ2r4GZNVHRubzuo1cT92tjQg/zaW3p7+hUdSwxW88Y5A0C8oQfxrowpl4ManLqmcvUfiSoi\nVDq9uKRf9MVDXUlapSM909UVRlRM2dofoEvYF42GGHBqhGXRI3FkKr9WaSprtxIXXEd+kMDRu0Mk\nxePyWVolFdQn9XnmdvW2eoYpIyNJM4sO8ntmTBkA/C1CFwQQKUEHZWUo+famydQolUqIMY3Ovn6G\nH1yT9+sq8IDIr1Uc/CGpUlKrqY9CjJvvmNyAoL6F4qFOxbpYIPco0PdotybajNV0kvu+iikDcDZ1\n9ezXT/8igM/OvvgijDH2qwB+F4AN4B9yzn9nRJvfAPDfQAxVH3LOf/Pj9pmFLzLLLLOvpH3euS8Y\nYzaA3wPwywA2ALzDGPsB5/wmaXMOwH8J4Duc8ypjbHb03rR94qDMGFsC8L9AyCc4gO9zzn+XMVYB\n8E8BnASwAuA3OOfDBNQnMJVY3LaDZFvN2CwrNGZZtkRpLctKttWsIc2lUDNPRqSrCWvBMtkMCVOD\nxYh4hI8zNXsJwzDZViGYdMXfpA4Zaav+fTAYGImMVNtBMG744zhGr18C6jpcombPvV7B4AuHYYgg\nDAwEflQCfwBYW1uDk6tjrafLTNkSSc97LewOSDJ6Ka22LRuuK/aneLiu6xqc3Gklhy4cYFxmflMS\n6VphDRN5styViemL1RLG53XGvJWVFVgpVF6xK9JMi3w+D8d1kIee8alK0mnZuyiyYPKmuVqpca63\nIVYdhYGHdlvfTyXyKC1N4eBAL/PX1tYwl5/C7nUt0FEhiflXp7Hztl7ljI2NYfKlMqofaNGOYpN4\nTg5b9zVHvVAowJq00Dkys/YVikXEMUdIVpTFQgGxHRmJ+gHxnKWfy4IU4rhemGyr6yPk1Np3eHAo\nr5MOhQFixp9+jxYWxAqt2StjIadXa1EUIfQKmHa0WErdex7Fj612/lntc2ZffAvAfc75QwBgjP0B\ngF8HcJO0+Q8A/J4aGznne0N7SdmT8JRDAP8p5/wSgNcA/IeMsUsA/gsAf8o5PwfgT+XfM8sss8ye\nCVMx5c/y/yfYMQC0Ku+G9FE7D+A8Y+zPGWNvyXDHx9onfkY459sAtuV2kzF2Sx741wG8Lpv9PoA3\nAPznn7S/zDLLLLPnyKYZYz8jf/8+5/z7n+L3DoBzEGPlcQA/Zoxd4ZzXPu4HT2yMsZMAXgbwNoA5\nOWADwA6M7BDGb34LwG8Behn96q1Ugnm5pF58YwAmcSi19Hvh/T4YwTgsiaov/r8DfGNWgDlqyWm9\nH2BpVy/zVEii2w5xUuIwrivathoDHBsjAgMZOmg1+lgYM0u0lz/o4+vf1H+3HXGM+dUe4IiIjSMv\n5ezDDi7DzH8BALOPOoBEv1ksjvW9zv+A//vUd0kfxJ8vVtZx45QGTDjnuJp7gGunh7OgpdvGcYyv\n/fQhnI4+B3V9TzSqxtooFzYw2anjdEGHLxSrY76zA5Dq7P2eAAv9d7exOC1YEu2+CLFc/qCGj/oa\ntFq+J5b1c289xO7UaQBAYVPcgLH9D9GY+VrSdk4CfVMnruHGtL7Ic2MbOPvi27h/Q3diakosd39z\ncQVrWycTv5/z8ddm72Nr72ziO3dchHqqF2dw6+BbiZ9zjoPpY5h+QUuD1bL+Z3PLmLyqrwUAvJvy\nqefyVvO7KJMiB4Ef4M/WL2N28iPjWADwZv0VjFc0wOX7PrZXXsBCUSOIOVs85H+9+C+weFEDZK7r\nYmFyB9tnNDNF+WdnN7FHJmau62K6tI6DeZP5AABX93+Kfl2HDiqWeG4X79Ywa+l7xxjDyfUDzDLd\n9uyEeJZOrXYxM0Fl3TZ+tjSBZl6zZO4uCHn/4WQZd6ta6t+YLuFocRnQZRTBF2S46uwJ8PvfS/xv\nDOfp/7nsKbEvDjjn33jMv20CoBf7uPRR2wDwNuc8APCIMXYXYpB+B4+xJx6UGWMlAP8HgP+Yc96g\nTAHOOWeMjRTWya/K9wEgl8txAHj7ffOqq8H6mzbwzpYsNqlYAC7wdqDbK/URs1p4d1ug1KoA6tJO\nBz8N9UusXrbLIfCRZF8ULPHvF3gLd0iSexUXO88buCuT3Cel5zlw97aOYfqeZIDMVPHhvniwFKJ+\nefIAH1X1A51cp8n9hPmgEO5LS3vIr5J7KNv6wSFy9/TDFMcxnPNN+Hd1W6Vy9IND5EnbIAxh7zXw\n0ZHuQxKXtYCbscYZJiYmcDpcw8OejvEm8cEAWOmfTPyNpngxLxxso3ko+rm7Kwblxdketvd0DPys\nTLJk93bgxWJ7UsaUC70d2B19vO6ueEunl9p4IdIx7PrqeyhM2yiv6hjmSV9QqsYGNVitlcQ/bo/D\ni1oYC3Sy/9WDVQDAzsEM6rf1sxrHHL0XTEaFUuz1r8YIr9HYJkf/aoTwGlXNiWetWxogeF9/+Dqd\nDjpnuth9MBxT7p6to3vfjCn3lgaorusKPBMT4roPKgF6+4RKWLDBz3BED0wqWq7owIINe12/wvlC\nAe68i/xOAWkL6hU0dk8kf197KPZXnO1hbU+ziSzLQnGmh/V9PVCvrYvzLJ4BPiIZP33fQXhlG+Uj\nPbk5L4k3d51FnM/pEXjjYAMIgPmBjqPvrYv8JXzme2Drmmvx+qmnk/sC+NxzX7wD4Bxj7BTEYPw3\nAKSZFf8cwL8H4H9ijE1DhDM+lvT3RIMyY8yFGJD/N875/yndu4yxBc75NmNsAcAnBrCV/DddxXak\nvJgmSf6EorfJwJfKOfxpLKEkxRp0SKSvJM8zADRb4mUajA/0tqzk0C/2E5/4reh8v9BHvaGBOgDo\ndnuoVjU2qo7X63VRI/4witDtdo3KG2qg7fV6qBKgL5/LCQ4rqdStQBub2/AcDQKpe0El2Qpw8rkJ\npu3sigEvCAN0ArFSUOBdoRgl24D+QDmBzt+syg+lq2crYDFdFXmUqQ91Ot/0yZMn0cn1UMidHPrN\no/EJ5E/oWebu7g76rotCQX/ou1JOnwYAXddDlMpBraTRrusm1aoB8TELfbM6ubI45xs0ynw+j3YK\nHH2cDfoDRGGUyLt139wh8C6fz8v84+YAXqlUkBvkMDmhgdTGtBho84UGpqY1U73ZaA4BrIW8AnTD\nZBuAcR+Vra2JVUX9eBFrG3qFcXBwgPbEUgLAAo8HWJ+Wfd75lDnnIWPstwH8CQQl7h9zzm8wxv4e\ngJ9xzn8g/+1XGGM3IWqF/R3O+eHj9/pk7AsG4B8BuMU5/wfkn34A4G8B+B355x//HOeVWWaZZfa5\n2BchHuGc/xDNQp3+AAAgAElEQVTAD1O+v0u2OYD/RP7/RPYkn5HvAPibAK4zxj6Qvv8KYjD+Q8bY\n3wawCuA3nvSgmWWWWWaZjbYnYV/8BMMUYGV/9ec56KuuCfQ5shr1BdZNgKjIFUujF5y+0da2xHKN\nVqOOmVj65IIeWoTOqTicp8gSz5XLpOXuaKk39auTPlvoorQw3PbitOap2rbo5/nK6CrQo/znljoA\noZKryMu502bbOOa4cHY0OHrutJnQ3HE6OF1tAISq6nPRZgmHRijICRxMRnXQlPH5hoh9TrUp0wfw\nHbHiOpWrA0V1LPH4LOdNafmkDDGWuvcTnzsQPOd8847RlvXEufZyedjTOo556us25s+bjM2JSbHk\nLi2Y59zJ3UbPMwE6b16EdJqVK9iDDjO0y3NoHps02vYWRchhcNoE0wLbRu+kyfVX977VWEL7SIcq\nwjBEa+YsRlna33Jc1ConDZ8K3RQW/iVOTunraTELs0tm2AsAXK+Byry5Cs7ljlCq7Ay1zeV3UNh/\ngHxIQiCysvmEVwNKWlI/cAc4PmYC1Yu+uKHnUsnzYx7jXx2bQ9PX5a/jgrjWRzOmPr1T6aCzdN7s\n2IL8+4WXDPcbZrH7z2SZzPoJjQJ3AOBbMmZnAT+LBfimYrTp9h7To41qq2Jbx13gFonzUXnxRzIu\nSON4d0iKRBpXvS33oWK8Cx3g9rZuS+PLP90U+6Nxx/d2dT4KGj9/d8eMN/J14D3io/Hw967pfaiP\ny88+JNW3Sczvveu6bT6XA2sC1wY6Ef+YL/+dA3eY/rrk3BzOAHjgagC5MqZ/tzWmX6J7e/fERg/4\nKBDgHZWs327pAc0/rdkV1ZLYLpbIwFjRLIuDWAwA/V4b0b5mEjx6d1X+qa81O63Ps/ZQb5+ZFEn6\nCz2drH9vZwUAUAaDv6MHk91dASZO3tegYnyoB7fc9ZVkW4mWCjf0gJ+Av94xFLa1XwmDJtc/xCij\nflU/kVbqVrHqzjbHyr6+B44t7vPaXQ3cAvp67qzo+6ni1tXtU0ZbVqmgE7fQd3Qll9WWuL4oPcJq\nS7dvNsSIePdQMyd2dvRA/x5JlB/FEfrlXZRX9CSCYgtzGxpNVfUcy3ffTXytLULFePeNZPP1f/t1\nAH95q1lnMuvMMsvsK2lZ4dQntDAMjVkpoKlrkRtpFoMsmRNaYbIN6NkZZWooipmdqqCr9stAygN9\nTCJ59aeahapjue4ARTIDV7Mi2+4nM5yEcZBC61XdPdvuJFQ6hY7bqQT1rtyX43aRJzN6xhh8P0iS\nywNiRgwA+XyAKVKeKpfPI3/QxVRFI+rqPLzeIco5M7FSoX6I6XFSJ5DM7OnMXcm+g0GAdkdsv3hJ\nJCyqDAY4M6uDIMsnxNLV2lxB+ZjYVhnwWK+A/JQ+nppZ3Z9exfRxvQze29vDWKUG55wOaTx6JJbZ\nbIphbU0zTl68fBmhGyXJ6gHg2HFRN26sMIaco2fgtm0hLBewuKhnUOo8jwoFVKZ139rtjnweXOIT\nS/nINpkPvu/DSVUWV9sdUhgAEM+I4zpGxXEVvrBTye8L+QI8r2FU7waA6ZlpFIt1Y2ZamazALe7D\nnzPDMPlCHrmajxxhgEzLe1CwdjHt63Nu1BvgnBvPgToP27aN8+t2u2Awq2+re9QvzaPzSIdFwjBE\n0OsiJKyiojyngefBK42u3fhZ7XkMX2TloDLLLLPMniF7/ub2mWWWWWZPYFk+5U9hr3lmEm0VOnjB\n1stPlaD+smcm8s4xAUScZ4ShIFdP3qCDJtm1ql82in2x1BnNkqB+RzIxTnpNlAnOooQLlFHhOKLt\nmXETOlbLwLMkqXniO9Yy2BeqPuHpZVPmzcBwatlE4BPmwzGT+eC4Diq7DZwNtQTY6Ym28wMTmc8h\nh1LvAIRYkvQtzb5gBdGnhUIfrxTF9txAADmT4arR1toUoA7b/3BoKcb2TSAsEczM9tFhOlQxdrKG\n4ryZCP7EhGg7d9YkAw1K9xHkTXWr2u9ubgYtaLCwNVfA7qRvtG0WxE1IszKCIEB3OZU8Xz5LndYJ\ng31hWzbqUybApoQxRxMmE8GyLByOm1Joi4krlZvjWJrSubRdxx1iWQBAoVhDYcI8ZzeXh+XvwcV1\ns7HrwoluwyHZ7mYs8ZwW2T5gacDRmapiadw8Xq8oZfNjXVyFft7CMMSfHJtF09cAogo1BqdeNPYR\nxzGiM1cMXyTPOThttn1a7ItsUP4U9tbATNhNlVyKaUGZE3/R0zG2cU+/CO9yk82w6AF3SbFPmv7y\nIxlXpbHhuyPUV9SvYrELA+DhgX5hVUwZ0IwKykT4kLRVMWUAiSQ7UVxtAh/s6YHIJbHE67d0TFgN\nMNdva1+eMh/u67QjuXwerLaB+85x7SNtV4jqbXx8HAsAtsd17gIaS6T+9x+JD9ArnQbe64j4qHNS\nx4B3Pb09dUy8pBaA+NgviXMgrEp+TOc5gFTQ5fxV5LhmbVxfETHjxoq+PquPdDxy9X3dz0sLgnLm\ntTT1TD1TcyjiREc/X9syN8oyyZGyva1VZpUHervdFm1KtzaJT3woCvlj8Dd0zFRhA9PbOvcFjb/O\n72l5sfqgLh7oHBeqv71dhvUj/SFQCrqdFc2GAERMGQAaJN+HM1mBi+sImubg5xTyCO0mwuIriW+/\nLpkP1g3sx3pQfHgoFMCUfaFSw17FEa5tavyi2+1iUN5DeZXQNZt6RPWvv5lsq4mM++GfD50zAHjX\n/yLZfv1XfgHAcyGz/lzsCx+URT5bc6aT5DK2tZxZ5W3lMTdyuKoH2uIWHCa21QvhOF3kHQ2eqFmN\nFQRJGy/J3WwCKmq/bq+nZckJ+DJcMRowwULbshOf2gaAWJbPMapvR2pAYZqcTM8tJXN1XRdOqrJz\nSX44PL+abAPA9PQ0Sps1zJOqwep8yvuHWJzRL5vnecj1c5ic1B+RO3cEj3g87GB/oGdsSqKbyw0w\n6Yvt4xJMyx9swp3WH4GEMkiqiKvB3oljhKQissrTDM4Rkw/ClStX0C3cxYmypuWtrgoKmpBDJ27x\n8fUGCMhHeG5OfKjSgNqpU6fQ8Po4VZgbanuzGONSWV+f1dVVbI2NYVGfGlotcYx6MIbpYxRAtNEr\nl7BA1h0K0K6lqm8D4tpT8E5tF4tFzNp6+TQ7Owt/vIuCddr4/fjEBLi/j3Ffz8Jd10Xo5lF0zBn/\noN9HWmqwuCjOM9deg1vU53xwcADfPzSAyVpdgqrM3A1X/5H7ltzvmBvUUcbYECiocn7HYYAopRv4\ny2xZTDmzzDL7SlpGicsss8wye4Ysiyl/CksDfUk1a1cDEZEllj5XcmYmqiIXgNdZtBLJsBXKEEK3\niRbJvKh4qydIDNiTsa1jLRNEUqGFhQbJQ6wqUTt1lMiKMCiJg5yb1MtlR+ZYPp3KxazOjQKAKs58\nJgX0Oa7o06mUrNa27CFAz/NlPtxZMzlfoXCASrQGkBTabltWa66bFapt20autYOJnQ8S39lQgDzH\non2j7UDK20/4VUBGHPIHb4u+1G8abe2GLB11mAKcRviYKms1P0CbAH29Qg8D3wQbl6UadzatZp5c\nBcq7hqvlifPYcsroQd9/zoEHrplxLZAy/dW8Wa25fmwMB9NmJreBxEP2d2fQHiNqTIthJ2/yg9W9\n3ymY/lE+FUr7N8e7qFRWEr9f3IdbWkHauJ8DvLtGAsXQthHbt5GucQ0WwoluwWn30/8CZ7CBHN5K\n/n6itIv5vAkITxwTz+OZaROBC4JgSGYdyLzb4ZnLQ8dK+2KVyfDc14wa2ZnM+kuwNNBHY1Lq31RS\ndQD4SUd3c7YkCfAceJ+JbRWXnMkDD8saiKiTmna3ZFyVxvEekDgfjeE+kmIMFVNeCIGVKhUV6MFY\nSarzOR23vH6oATkqlLl2IPabxN02gQ9I3loa+7xxh1SdlvHsWwTQoykiH67puOL09DSYDexMaMmx\nUW9tRoNAnudhYucD1OZ17oH7dZ2bgoKFKqE9+sCtnujH/PSryb93ybZFJNXRoqhMTO9xuKAT+6t7\nl/NW4RGgr9YRH518R8eU1z64R7aTTSyXZZ7gqs4XXPJEHxcxhjJ53lQ/vjbQIFynoz78MS61dbB6\ndVN8YBc39YdWxZRngn1MN4ari59qaiYKvfcnGytIG/Wp55LV8zjqnUz8zqz4avfrJkMhxybAAbD+\n13Vb1xWVoYNvGm0H/T5Cu4Ww+PJQH3J4C73ia/qcW9fkn5pJsrap5eQU6Ot0OkMy65i8c+41DeqN\n8sVy0hQDsN77ceJ//deeTj7l51VmnYlHMssss8yeIfvCZ8qjktyPqjDtyIrJlh0n2wDQkpSkgTtA\nKxDbSjKarqyrJKjF/f1kW4UpvHbboMcpdLzU7ydovGI7jI0NcPyYnjV6vlhqzuIersyKahiKcTHN\n7+LCtJ7dKSrQFLuPc5Ni3a0Q6Jnpe3hh+lzSVs1oZyo3ccnW3M9SsYiJ0ofIlfRMUtHnxvJd+EW9\nfIzCEPlc3mBUKCQ93ynCIrLctbU15Pt9Y0WhtntOD/W29p89K/o+kevj5NhJAHommE6UP8rUjJhZ\nlmZcQFeNiXmcVCUHgLHxccSWjzFXS4OXlwW3d3y8juVl7X/08CEmTjdQe6hDXUtLom2aZRMEwZDE\nPqmS7XZRtvRq5cqVKwidLq5UThi/B4Da6jSuTp1M/LZto9908Y3z+voq+X9Yd/DaJR2usJiFqG7j\nF8YXjd8DwPzMn+GlSR3TsiwLPbaOmTFCAYF4rga2A8/Sq4AgCETC+FSSez6iUsTj7l2r1cLAG6BF\nwnuzM6I/xUI/2QaAW7duIQxCo3J6wqRKFYZgjA0dK2Ejpe7H07IM6Msss8wye8YsiylnlllmmT0j\nlrEvPoXN76Vk1lJu2ev0MScxKbX0GfQCLBJc0LajobaFhkTat+sIdEQCkQwTPKrXE0RahQ4e1WoG\nSl2XrIvq3l4SaG9L8O+929soEZxFyWc37m3CPaf2K361encdHsnlrZZrm/c24ai28t+m/9dNLJD8\n3grQG7u5ilhHL+B5HvIf3kesoxfJctd//y5KBL+J4xj2/3MfeaLstaSyLLh2E9ZV7Z+s18HWDjC5\nrNVmZ2Xe29nDOvoar0RlV1z3/F89xMKMAAMLnmA8+HO3DHTCjqVAp3I9ITMw2YBNfAiieoYtr88P\n/e+hZWsgkzGGa9a/DtJdrJ0SANbu/CzmSEnIOI6xtziPWWjWwL7c1x/tXcbxWIOpURzjw56PvZwG\nktX9SPvBGD7setjLa7ZGLJ/Ld//VONqRDgkwi+Gje46oU0zOAQCu37VFuUziv37HBrRgMnkHrv3S\ny9ifWjPafoRfxWWmQz6AEFrdtH4Nl0CFShFuOf8WXkgJRSIrQuXsGVyqafm0CiHWxo5jokGk06yA\nh6fOInxEis3K0ML9E6cRrOrjjZ9eQnv7Mnp9DYKHkQjvxLevgGi+wBhDdPuKce+TEMqdq4hIxOWN\npyHlk5YNyk9ob/VHy6wvhMAdKbNWqrlLA+AmKaOh4oO07bQrRg9eBNanpob2WwbQlLFUVQW6CKA9\nq+Nj4zKm7AAIl8WIpmLK/YfAUaQVVZ4t+mBxIOZmTJkxgDMSU+Zi6LcBRNyMKc+1gWh3OKbMG8D+\nEYkpl4rgXaDeIjFlWdWb94FmR8tnoyhEoQDUCaNCxZTdPSA4oVkSO2trmN67jQPC1Lize0fuB7gd\n6fjo2XHRd8e6gz1HjCaeirX2gY7/raStrahiDSAaE+wLJpO1ow7wcS2zjmRM2XPPYTzSzBDLYiih\nhYlYs2WuPxIx7jZKqD/qk31EaKEAjyS+/9qSoF8txRN4OdJf6iAM0A5dvBToQUdJwIVff10YY2hH\nDl4OSLVwGVNuOxzfzus+2LYNFIDvlDUnU8WUUQS+O66nABazgBLwi+OkgKw8xKZ9DH6sVYGWZcFj\nh8hx8oWEiMU7qMKLNHYQBAFsNGAHY0bbaDBAmGugSzAUNSAG7n10CppjeO8oxuRUD9Uj/Y4qZtL4\nVAf1mmby3LrfQudgC7kbusIMl/HlcA5wdn+S+BljwCzg7Glfot6dB+yd/y/xv/5rQpr/FMfm58qy\n8EVmmWX2lbTnlRL3hQ7KjDG4rjtUSj5BbEmuhCTxfaqMuvotbau+5JFlwSV847KaITabsGSCb1/O\ntK1WCzkyq1Yz5cHBATzpV+EEO5dDjnCaFVrf3d5GXjI1lK+2t4eJU5rjqfp2VKuh8oJmSQDAVLeK\nysWLxCOWlN7uJvLLOotYFEXI5XyAJCkPAjHzsiwzL4fIC2Hmznj4UCSZma1WsSe3AWB/fx+5ZhPb\n29uJTzFPiv1usm34S5vJtuuJ41qhlWyr/gKAxXX+A9VHxliShAgAfFsWB7AdOL5eEfX7A3Am6hMq\nu3RJrB5ulyJczOu+/ehHP0J3oYijI70Mv3ZNiFR27Yu4tqXP+Rtf/wa8GCgW9LGaMolOzG2DMZCw\nfkg0QK2eHMdGLkdm24zBti14Hkm8JEMEFrPMfCiSHcEJI0KVNIs5R0TW8nEcI7bjhKVC/dwy2Qxx\nzCXDwWRaFApFuLaLoqVnyo9WhJCIT3XQPdR8a9/PwXZC+L6eKStmkls4gEMKFBSLRXgND8XicD6L\ntEVRNMTIUIyLOGNfGPb89TizzDLL7Aktiyk/oV1IfU3V136ZzIiTStQp/qsjJdO07di+kAQf1Wqg\nRWVcCd45+1oyrHIWs50dQzkzkAU1gzUNsoTy651fXaX4BLoSOOvf17G0SM7AW7dugZqaATRvmlJk\nAFh6dBPeiGfGvWO25TyGd8fcrytnU7n7ZnXoOI7h3L9rACezknM6uWnKlkvtNiaaDZzaIrmX5Yx2\nZteU2hZa4loWlu7CkRfD64hz9vopmbXKrtfVkmomczqj9UEKhhJ/2yqXsQWtnAvtCPdt8znplcSB\n1/IcFDHqvriEwSmz6vRWRTwJW51xtEjGs1YL+CA1mesH4jxuhCaYZkUWrg/MG5QAcrsWQIs7M+Da\no9RsT05Yr61YKbeF6yujBwt+sYeKTVIAMOCR1RpuZ3Gs2KY/ZjHW3OE84bZt46S9jSPoQqV8Surw\nC01w4i+7LRQWzAvk5sQs3Zky5f/LzMWbby2iUdYrztAWx48nrxhAOuccvHLVeI9iia2k275xF3+p\n7UsZlO/kzWrWdElzWy4P6TLoOgl3GHmE5fYxCeJFAFpEHFEmL2Mg00xaKnwBID6hRQEeCU94FwSQ\nlYQvANiXNPCWJxLn/EsCUKOy54lXNZhGwwiVb3+bnjZYDhh8k/r0snPwTS19Vden93W9XxW+AIDO\ny1pWG4YBchHQuarBvz1SjXjvrAYh9/f3cWprA49Ibkoq9d5YPpls56R4xB8DOrbYd7mgz7lf0OdB\nwylB6TsARAgIEEMwn9BAn2KtLDpzWIS+X/1IfHQpSFdtqQ9xhIst/Uzs3hAfm/wN/dFZPCPu845d\nx2JDD17fOCcEG6+Tr3ezqT/wv0DyYqjwxXdz+lonYYg54BfzpjgCAH7pRf01pCKpX3xRt1Xhi+9e\n0vtVv9/K5/BiZIajAOByZKbjVBOZF0P93Kpn4uLABPo8z0MeC6iQfdQPZfgCW2Akd3JzXey3+VBf\nIJu8G8GWDl+svb8OHG5hjEjLB5K9E8IE+uI4RgQT0FMTlnTb188LcPhpyKyzmXJmmWWW2TNiGdD3\nBBbHMfr9fiI9VkYrTKsZQ5KMfjAwZLLq32lbNau2ggAdMsNW+y0OBmjLJTyTM1o3ihJ6E6BnNbSS\nr5rlshRwRhN1q+3HyVZpkvdkRaCOFccJJUy0lVWuowiDge7bYDCAHYTodnuGDwDcIECHlLDa29vF\nbKOBzQ0dklBA1li3iyqpJjw2Ngb/0Ky0fEKuHgqtRjI7BlLFASQdT+2XRQM0I53aK5bnMR53UO+K\nmVOhKKhUhX4XnVgDco6kyvXyPfRqOrWdANRMyfDkpJix5ew2Jl09g7506RLWZnJYvqRn7qpvkWcC\nxdc/uo7d4iyur2ies5Kk960x1Ls6hFIulRFFDIO+/r16NoIghw7X94NZDEHgo9Ol/GfxbIShj17P\nzNAWheZ+1XMUhREGpHo7Y2zoHAA582SmP4oixI5ZRED0dQA7P0Crq1cMR4eCs5wrdNA71PzlqakK\nnHwEb0onHqpI4HtQ7MCb1SvRUqkkk/Xr5E4HBxo0fBYsA/oyyyyzzJ4Re17DF1mWuMwyyyyzZ8i+\nlJnyC31zKaeWbpRRoUIAJwJzKWbJ0Adtm5NL8karBQqHeDLvcY4s2V25RLb3U0nc5RIuXNdgEZeA\nlf/oEWgvOtJP2ReB9LVv3wY1FUJpUfaFAoBWbyFH7oDil/r3zH14UYT8AxOSVqGQ0qP7ht9ptzG2\ntWmwLyryes/tmwnxXddFuVbF4qMHia9Qlcva++bxEln3/G048tLnJLe2EJttVRL/Iu4lMmu3L6/l\nIMVOkUDfgXUMKzkCsjkx7tumHF9Z2n84m8PepGf4BhNiv7u9ClotHZ7xfA+rORM0y8vMcHctM6G9\nF3q4GZn7VVjszUMPoGQEBtxcN9uq8MWNdZPVMdInI2LsaoCK1zT8a84wo4JzjjXXZEnwmGPdG+YJ\nc3Cc8/bRIiyL3JJ4J5yxXrINAI7Tgl2pGb8fFETYIyyahQTmL8cIqzM48HUGvHBOgMbPAvvieZ0p\nfymD8i3fLPFOieOKUUHjzjdHFDilbVVM0AJQJSkrS0RWqiTVjLAkgiUt0Bif1qiyYl8o2TMD4F7W\nVRNo0vjCyy8P+ca/RSTHhDmSsDLUoJwzGRVUNNB9Re9DxQ1bX/v6kA8A6pe1pHpvbxdhBOyc1PHg\nJqkwvHpcJ8UoFApYfPQAW6fOJD6XMFI6L2kGh4op9yeAvifYHoNA96Fh67aqWCxioG7J6+Pr60Ml\n2SqmPB1PokSqliuRxkuh/h2N5VNWxt09Mdgsk5wq6pznvCPMVfXoqVgyl9okpuzpZ+aVmMSUHdH2\n246eRCSMiingtTkzpgwA374wHFNO+0f51Lntei4uDspD/hdSjAo1abnY123Vh/p8r2i05ZxjDDMo\ndbV/c120zS1V0VvX588k+ybc0bFjj4isvLp+PnY+2oTT2Md0X8eRW7sr4vf48tkXQMZTziyzzDJ7\nZixjXzyhRVE0lOR+lKkZsRWGxuyYMjXUdk8KSrwwRJ/U41NJ0+1eTydvl0v58U4HdYIUB3Lm6Teb\n6G+Jmde05Dzn+32EJBG8Ym3E/T4C6Q+lr9/vo0HaKrFKj/RBHWu200FI+tBoiNndQr2O7VXN/Tw6\nOsLp/X08vHEj8TWbYkZ38XAPtwd6Ucg54Ncb2CDsC5Xw3fdNpsXU1BSK+7uGnDo5txQ7ZXNzEwBw\nYq6KnRWz1h+KDWy2N5O/qhkbKzWw0RL9UPfwWKGKzY6WPStOczV/DDs7K4m/UqmgNc6wW9eMAbXq\n6IwB+w29TL98+UX00MDlWX1uW/IernTGccLSPNu3334bR0sO7q3r0lKzchVVqyxj5UiLh8bGxlAv\nzmG1rZft03JFFYQ2OoEOK1iWhTC0DX694jSHkY0+CdlZloUodozrq2bacRwZHHTLYpJRMVR5b4jp\nwxgDmLmiAIDV1TUszTewvqNZL1aSQMtKtsX5zaBfaMOf1jPlfEFy113PKAyRz+fhOA7yeb3CeRwL\nyXVdwLJNDrs8/ycpkvCXybKZcmaZZfaVtCz3xaewNNCnZrzLKS7mKJ+aBSyRfdiyTbvbNbAXtd8x\nUujUkdvFhll12pc8Zo9wNiM1493cNBZBsfza89XVpApvT/oGDx6AmurvgICCKievv/MIk+QOFCVv\ntbJlyqEnul0sHJognZp5LTeqSNtCowqak2Z80JP73TTa5bc34e/tYuyja4lPVfDOPzQBREtet6lv\nbsI2Q5aYyZn7VUDfTF771b2Yzm0YbVV6y97Yq9iYIAVe8wybJXPGp6CHdROPwzYauAMTDGvKUOuD\ngYcWKZm0u/QCjmaXjbYtOfvbGjOl2r7vYzVvgoIFJg5+p5YHSIFxxhjubJlKVXXvb2/mhvy3Nv2R\nbe2XI0zm28SPkeAdMNo/ylebd7BQ6cAmJc59OfN2xrrAcX0i/XKAoGhK7NXz3vXN+zx1cYD+dgU7\nllaERvOC35wG9WDZCCfMatYqCVO67dOUWWcx5Se0NNBHwbDbuVy6ueGjoKCSa/tyfx6AAwLk0bDH\nkcoSR/ZVp1niyLK+vyhkp2Ui2Y6okEKCejEAS2Z+yxGgL3dVp2a3qERcSrJV+KKfA45e0DmEVfgC\nALZPazm0yn72cEEDkyp8AQC3p/RgwjkQhMBd4lsigObOGZ2/eWpqCmMfXUPjsu4vvRfNqxRAFB8F\n3wZ22iSTu7RN4qOy+fWWABHpvdjs6LZqOZtruDje0wNrpSLu07m6/rrQ5ILnyTf1WFncu28QmfZW\nU3xkd8IBLsQ6TBCuC/bH3LpmgcySvNqnU+ELAHiBhi/yEhCeAL4+ru+Xei6/cZqEW0hY4FtnOkNt\nXz2rB1AVvjhwbZwngJwl/Rd6NKuLtlH+tG9l5xAOCoh2SBY+FeY7foT+hhaKTB87BgDwGycTXxK+\nAFDs6vfg8PYO/PYR5mN9zoc7IsSWBvXUfXb3SYVrGb5It339/NPJp5yxLzLLLLPMniHLgL4nMMaY\nAAdSWeIUiEFzJNM/Kf1LzYqpHFp9hS3bBBI82dZpt40Z8ihT5aDG+/1kW0lGl2o1HBFQRs10ZqtV\n7MkZh/LNHB1hv02Xn2zIr9pOtA5xSM5NAS5+9QgP+APitwygUJiWhZuAijeUT3kUOAoI8I41GgmI\nR8/5/P4u7oZ6v0rKXTp3hLuyDNK4XH1MzLaxu6dnk6o/FdZOZthqBj4+2zLaqvvVXmpj91D7d3Z2\nUDs7i+C+Dtso2uHRiUk8WNVhm3a7jcMpF3fJ71ViJR6b+YkXFxfRKZexuKiT8KysrAAAGs6EAZC6\nrovDZYv/8YIAACAASURBVAf31u4Ntd3eugC+qTP0+Z6Pnc4ZfNggnG/Z34P6Mm4Hegbu+z6qR8fw\n4IG+7mqmHJ1r4sEDzSeOogiHx3PgG2boIAxDVJcLCNZWjbb1EyX0Vh8abfP5vHyPdMhvekbM+KNC\nD+UZTQd1PRehbRv5sZMUBOAGSF8sFuB5LoqF4lBbcDMhk23bCC1mrMTUe8/AhsDJv8yWzZQzyyyz\nr6xlQF9mmWWW2TNiWUz5U9i/MTE6yf3X/AAn5QpLIfgv5UOcJM1tR7S9OjPANRlR8D3hO2i0EJAV\nfrJkbjRg4uKjfWm/CqEstVqgeqokJNFqJW0TX7Np7Ff5p8l+la/arCOIhtvertYx6Jv+W9Ua+sOi\nsCF/aNl45+AIJMkc+k0RNrm2voESobsGQYCPqjWMh5p3rMIUb1arQKotAHzwh03EEqdr+KLtu6uH\niLXQK1m2vrd2hEgSHdTyPN1WgWHn/sf/GcVLV419TN97hINzurSWCnVM3L6H2kUNFpZKJZx7/xr6\nL18davsbv9xD92s61/OxchO/Mr+F6o4OX5ybE6yEpbM/wvqcvtOWbeH46T/Fxpwuw6X6e/Ff+0Ns\nva+ZGY7tYPn8BtbuaiaC6sPimVVsPdAnbTs2fvPEI+ys6nNT937nW0U0ulq2HHMOb2aAQao0QBzH\nyM22EJIc3DyOkZ9vaUWltL47QHF6H2VoQM7Ji3P28lXEIEVoPQ92fh0R8XEZ8rL9NYTQ4bbp00fo\n/VMfa9c1myXeFG35vQuIc/oh7LsugutnQR9ApSOI71wA8rrtG//ETK3w81o2KH8KSye5V7GlCRe4\nBREHVgPihAPcIPEtFVOesIE7jthPuSQYF2ELOLL1C5TElGEyLR7nS/sVS2ICwB5J9K3isi6APSXx\nJr79ikaz1cvmEL9qGwDYGR+uvl0JgaNJzfywLAuTIVCtUJYFH9nW8zywCKjP6hf7mETUBzHQJknu\nO50OED9C84QeHFRMuRADnRktKunKwXrhCGisifNQMeVSDWjldQVm9ZEtV4GmzIugzq1UBVp5PSAm\nlU72NjDh6fgx5xylzSpCpuOVKkZb3GnCzeuY8vy8j7gewjrUL3MuLx7tMOjDi/SXeru2hVzpEFM1\nPXCpOPF4KUKXVARxXReTxQDBmmv4AGCqtAf4On+K53uYyR0hLmrxkupvpbgLXz8+8H0f4+P7KE9p\nNoTKARJ2j8PbMtNxtmChtGEOtGEYogMHhbXQaNuFi/yqOajl83lYyKFPaHil5NmPYFc1O6dQKmGA\nCF5bS+/VveshQq6j2ReNh00U+w0sOzqOvr3zUwDiGbAszbTw8zmgH8HvvZ34+ip1aRTDbvxF4n+a\nMuvnEejLssRllllmmT1D9oXPlOM4fiKZtZ3IQEOD7zkqyf3jpJ0Waau21UzHse2ksjUgEtkDgk+r\nkuFU5Cy4FIZgRIqs9lEOwwTFVwl7ilEEZ1kv59QsIx/H8E+eBECqPQ8GsOUsFtCCkHyrlSRZAkQS\nf9u2jWT/lJFCkWvbtgHG4BCUe0uyK3LNJnqEabG7t4epZtNggPQkM2au28UuYZyoWV8YhomsXR3X\n7ffRSIlxAMAfDNCSopxiSXBnY86T+osA0FerkcEAbcJa6Xa78LpdHBIxj2JGLDcaWCN9W1lZwbFq\nFZvk96dkRfFSzUJHzoQBMbt3HDdJvANQdkpssFPCMEQcmxJn9XyFYYheX8+K6406ygs97O/rc1PX\n6XwxxN07WrgRDAJcZBy3f6ZFGuo5qTIbd9/TLJJiqQSvMIXdB/o6AEKGHvYLiJqa/zw+Po6BbYMQ\nkAAIPnohn8f0lD5nVb29l6rU3m63EeUicBITS6rF+8NMKNuxk9UroK8l5yx1LSPEMUcYjqhmHWfV\nrKk9fz3OLLPMMnsCy2LKn8Jec8x8uLEli0A6wwH+tM+2xazlBUt/yd1Y+NZ7bcwRcMqVs74xwu+1\n5Re5VDNzxqoKlSWae1lOOQr7+6CTD7WPwp6OgaqZTm7HlKiqGbi/RSoJq9nWzg5oBl5bya/3UnmP\ngwDFoyPDp2bb5dR5OI6D/uGhsV+1MvFS+5hqt1FIoYcqsVIlJW935WxxstNJ9q345uMjZslpvydn\nzIVUH9TMc6xaNfochCGmUvtVfZvtmJJq27Yx3TIrOyt9Zc6fAjuhr5Hj92BXzD7MOeLcKidjGOgm\nByqnzFguY+LvMycH8ClAFoVYOG1eMzXDPn7O3G8UcSxfkAeQZjFxP29dKKEIgot4HpzT+u/JvvN5\nxMdyRh7ids5Gd2Z4xrlb7GKyfASQrOA9lSLXPUAPOn935ATgxS1D9qyAvihvcqXHThyh2S3g0SMd\nk46iXwAAxLEpqY5jC1F0CaZx+ZsXDe8bb0R4WpYNyk9ob4WmkIPKct8M5FKIRDjeHOjlESW1vx2J\n5VjBE69glAN2LY2e0xzHRxLYoOKSGpHXMrJ8qstQRUEucTsA2iTMQPfRkKEKGlpon9LAGSXLd0+f\nNs7XAjAgbWkmsQ6RRqvMY40FDabRZWSVnIcKvQyIOIJe3968BgAP5eB/SKTpPSLs2SVL/ARkA3Ak\n5ce08vUhATepKb8KXwBAg/QhSdYPfd0Bfc7bZL80A9sakcWra79JQj6evK5W30JnVS/PHQlOhrv6\nWLtJaCHE7g39SqiP2c4NfQ+TfCrwsHtTt1X37uE1/Wz3koyFIe6+p9sGgwAAx+13UmEnAHW00H6X\nfHTkdRtcN8MXpUpF5CG+r9sWx8VzWVw3B7W5uTw8VICqvl8qZNHDbeS6FxN/1G4L2XP9dOKjQiS3\nSYC+1fso5zs4dUrnatnc1ICdbdNtcX6u+2bio2FMx9H+11+XMuungfQ9h5aFLzLLLLOvpH1lwxeM\nsRyAHwPwZfs/4pz/14yxUwD+AMAUgHcB/E3O+XCaN2Kc8wQ8oaboQAKQk5xIV1xM2w6N2fGoStLd\nnqxmHQboRno2pb7D5SBAWy55VeWJmHNEpB++yt/MWBKeUP8epwBENUulEnDF43WDwACs1GzAIjJp\nta98CiBTs8Z0hWoFjtIZr5p5WJZlzMYHgwHsKEoANABoymNMdLuokfCMZVlD0usxlbiJ82Qb0LNR\nt9dDQWZVS3Ivx7EB3tGZlQoLUSk9Bc7UdhTHRn5h3/cFGEtApJoM1YRRZKwqbNsW95P0QVXtdrpF\no4J3GIYoj3XQJACiSjzk+22MjWkKXhzH8PwOyuWC8Xt1jrRvhUIBuVwtqbgN6FXLxMQBTp3SUuac\nn8Pk3A68q3rFoO7h7bk5+Ff1isiyLDQrDOWzZrY6z3NRK8WYmC8Tn4/QDzA+biJ9vu/BduyEIkrP\nY+T9SPnUM5zOsR0EAeIofd9khZq+nWwDQK/XHzqWbdNQyyeD/5/WOL66lLg+gL/COf8agJcA/Cpj\n7DUAfx/Af885PwugCuBvf37dzCyzzDL7tCbYF5/l/y/DPnFQ5sIUiuLK/zmAvwLgj6T/9wH8O59L\nDzPLLLPMfg5T4YvP8v+XYU/0KWCM2RAhirMAfg/AAwA1zrlai2wAOPaY3/4WgN8C9BLt2+4IvTCA\nSzbNmCa+F5RlQW2Ufzvo4zghdjiKSUDCCZ4EX8pGxjUkvF7KDlC5kEsHBwYzQAVQSqSUU8LeSFXJ\nVkVSaVu1HGSHh0aVbOVPMy045yilfMrSfs45gmoVNA+8LZf6pRRDIeYc+X4fFRJCUdc93Vbdu3K9\nnlyLRHWZaqv2QdkXKqRB2S2ADuVMkP0CIow0kWKWFJSqsGeyd9wgwEyafSHDN2Nji2CkQKnncxTm\nTfZGAjYeM/fLOUf5mPmcJRnwlrrwQQqnMgtTx80+qHOeWKgP+cuz5n1TPPp4Zh4tMldijKE7M5xB\nzbZjtCoAiKTatgM0JobLRrVzLRQLBwhBFJMqROcdYgCSVd4LgFIqyb3sGy9tGwLuiVM1tPtFrK5q\nCXm/L0IkQWAyLUQZuMsgESZwLjPjfY7si+fRnmhQ5pxHAF5ijE0A+GcALn7CT+hvvw/g+wDgeR4H\nCMNCGq36+1Yg4nC2o79SimUBmDHln8ZmCQrLBTZImfgcYQfsyLhhmTANqiSJPRWSKHaAkgAXAbQJ\nm4H2oSpZGdRXI0wNijCrtklMGUDzMSyJOmEoqPY1wk6gRv2cc9gAOsTXJINjjQgFwihCpdFI2BSA\nGQ+mbRNxDICmkqGTWOI+YT7QfRzKtkZsmLBFVIyxCKBKKoqrj8Aeabu7q0UVj2hFcbm9QWLgU/K4\nVqOAwzv62Or+Nx/pc6ZMltp9M6YMANV7wzHlceRxQPar+rt9bzimDAD7j8yYMgBU14ZjyhY8Q1Kt\nPnDlTTPm6nkWgBgTOxbxSQn4vhlTHh8vIYdpOA397CsG0QB34bW19D5QE5jqSd0H2bcYgEVYGbVH\nMYp+GydO6PSh1eoHybbva0k1531EEWDbWnpNY8qOQ2TWT5F98ZUE+qhxzmuMsT8D8G0AE4wxR86W\njwPY/PhfZ5ZZZpl9cfaVTXLPGJsBEMgBOQ/glyFAvj8D8NchGBh/C8AfP8G+4HmewRYAgFBW76Uy\n6TgQf0YwEd9Emkkq/CoZNudiSf5x9jjUWdXNy4dhwof1ZF+iMDTQfjUTpPtw09pWaepcWYoloa4H\nZT7QmTI1xb6gDJAEESeFAVTfGGGQ0L7ZqSIAk5UKcmEIm6wYVLgl1+uBkZlyoK41kXurJXdasq5W\nKF6zmVQ/VsyTQkpO7adKg1G/nWI4LEiednl3Fwsp2XshCJJK04alqjuPYpwks1Rm3qNRFZZVf+wU\nM8S2bTgpybHryOtuWck2IDLmMaYz5wEigbzaoibuMxtKTZAknn+ClAWtVhvlXIA2CfEkqxl3gEFT\nl7VyXBcxY0YZs+T5SjFc2u02BoF5P11XPAdhaCfbgOJsc+P8Hpce4WnZV1lmvQDg92Vc2QLwh5zz\nf8EYuwngDxhj/x2A9wH8o8+xn5lllllmn9q+kuELzvk1AC+P8D8E8K2f56Cv2ql8yuzJZdZq1mOA\ngpLbvB32sUWwGiUNpkCfI8GitDRY7deQZMvZQloCnKi6RoGCKaCPjQAAlcyaHRwYQJ+aLaSBvjiO\nhwAyNUNKy6wty8Lg6AhUM2nLlUYhdc5eqwWn1UJuextpS0uyXdU3ci3U6mIINFXydLIPBbCmQcEE\nDEsBfa7rYuzQVLGp442nroVl20NtlY2VF8Au6IfC9zny822jTSzLRRUXzecyiqMhoE89axPHWobM\n2rLYEKCnVnBj8+n+WijNpIFbBfQtPAboM4lSts0l0EdLLo0G+iwrxMx4DRbpb1IaPF8DiBgztqwh\nQE+tntIA4OyFDvrRBLa3NdDX7YpVV79/wWgbRX1wfsUA+nRCMVOSnQF9X4JR4A7Q4QuASKoJ4EyB\nQbrsVHJt9fBbDrA+QhoMaKDPkAaTfMoWWeIqSbYi26clwAaQJZfUhnybAH20v/XjIgG6WgLmALRI\nWxqmoUCfCpFQObUBIBK/4ziwYMqp6fKyQWTLpXIZue1t9Ih8G2S/dB8qfNEG0JHHC0l/j0jogAKs\nCjSl9QUpKKiW+2mgL6nHR/pmAIsjsvbRtsqsZgFHd/QnSglFWisaFDSu+8PSkJ8CfcmHGiXUHhSH\n/HsP9Tl4ZPl+uEqeH1c8P9V13V81QFlwDaBP+IfzKXueDYBjfFs/t74/GuizbRsOJhAfkPzN6hmu\nADjSg6rlukOAnhFWIwDg3p0WfLuGhQU9Qer3NeiXz/8s2Q7DxhDQZ2Y31P7XX/8egM8O9H1lFX2Z\nZZZZZs+jcTBEcTYof6JFUZSUekqMDW/TmaABZtCfqm3ye7orNZOLoyjZ7it+Zkqqq8ArTuTXjwMi\nRoGFNLezKSWVICQB5B4HNqqZWZSSs9q2PQROqRmm67rGisD3fQTVqkH9K8vZoTUYoEBmkxZjYEdH\n8EhbZaxahUeocqqfuXodrvQPZB+9ZjM5Bm1Lr4uqUpLrdpNtgFRsSZ0HY4IoSWdTFTnLzzcayTYg\nVj9+owGHJpiSv8sXY7hkVu37PpxcHw4BMZOq6IUYLpmt1+t1uG5g9EvR52hKAEDcszg2gbCAyfsZ\nxwhCfT/VTJnapwGE9fnxVNoB/T+1UUCxksVbcZyEhQCRWMnJDxBSUFBVi49jxKnc0k/ybojzc8C5\nBdt2jN+TMxq6Jp/ZuAAcnzfLKo9klllmmT1DloUvMssss6+kcc4Qhc/fEPel9PiF3zaXFDEXE/aZ\nV11cUiIguaScec3Di2/pmAWTS8bp10p44S3hsyTfs/DPOayfaATdkuGJU90uVL1mW7IATrRa0JCE\nXj4uNRpQ2WGV9Hq8VjPYDGrJOFmtJkuNpHL24aEBLSSsjoODpK1atqUZDmrpO16rGUn1mWVh7OjI\nuFmqb8WDAzMBv+OgubuLUen62O6usTRijAG12uiF486O4bdln/t7e9ov+9ulcnOIZS4A9I+OhpZi\n/aOjkdendnhoRKYYgP3DQ4MF0JYhpsbOjrGPvutisLk5Ugp/5u8fwv+OZj/Yjo2pjx7i8LIGstSB\n0/5ev4eFuxvYPq8rVKt7NH17DTtnTSXlzL0deOc0OKpCDlN3tuFd0GEj13UxfmMd3osHQ20vPHgD\nm5evgNrynbtYu3De8Fm2heO37mDjBc1ycGwbCzduYfvFF2Aaw7nOT9F4UQN6iiNdebSGo1OkGnUc\nY3rzPg6O6bzJlgTSpzbu4vC47sf4/j5+sulhZ6Al1f2iUKgOxl8EQv1kRrkIkXcFGGhfwrX3rwJ9\n7X/j2tNZwItB+fMNXzDGfhXA7wKwAfxDzvnvPKbdvwuRK+ibnPOfjWqj7JlKct8POd4bSJ29vGG9\nEHiPjDBq8OuHMd4PLcN3zhlgPU8ScstY2BiALZksXMVixwDsjUhNOQadmJ0KAajcN6npBs0CUMdi\n0IwM2jcGLbNWsbYygDplF8h4pQWTUWHZNiyYcmrVNwtAkzA4cr6PCEBM6gQiQfaB+ARB2mXclhNf\n8pOUPyLxwUgm4E9iygAGpA9J/BlImB3qfuZgsjrUtfQB9FPxbg9msn6VKJ8B4LLeISBiyiEAflYP\nJGqwHzwC+KZm2fi+j+ioinDHHFABIDo6QrCjr3urXkd3p4qWp58TFVN2t8rYY3q/MeewNzvYtbRP\nsXTs7Q72PS3QyefzsPc7BvtCtZ056AxJqgsHQLlk+lzXQumQYWKb4gwexmsOBvue0RYMsAcTCA/0\nxyURXHXqiA/0sxJGIaJaHaGn2yrhC6/XwfO67d7tFnyrhvn5e4mv030oNiwLvqNl1oPBAHAsOFzL\nqZOYsm3BdkawL/4ZPptxfK6DstRu/B6EoG4DwDuMsR9wzm+m2pUB/EcA3h7ey7A9f3P7zDLLLLMn\nMM4ZwuBznSl/C8B9qdkAY+wPAPw6gJupdv8thAr67zzJTr/wQZlz/kTS0I/7PSBkqUNSUz6atcHJ\n9uMYFWq2TlkSRhJ3woZQsxrOeYJcR4R9YcwqVRL3KMJAhlPU/uMoSmbHqp+jtl3HkVJdfbuUrNke\nIXEOHcfgCid9cRx4udQqxbZhj5A6p/0KgY8dB66SUat/9zx4pNyTEsfg6Ag+YWUAAKpV5MgKJdlv\nrYYiYVS4rougXsc4WTGU5DHa+/soprjZzVwOZcJ/VvfO87wkKT8gObspiTTdD00iFMcxfM8zmCxK\ngu+6LvKEldHv9WBZllFF/HFMhG6ngyAI0CWFDNRKKwyDpGiD6m8URRgEZkCKgyOKU34mZrr9gSl4\nsS1bPsMkcb2j34cwos+rYEdFpOq0YkvRog4AMAgGwhdpX/J+sU+WTiv2SgyTyfIc2TEgiXYCYrb8\nKm3AGHsFwBLn/F8yxp7NQTmzzDLL7Isxhjj6zEPcNGOMxoC/LzNffvLRBQD2DwD8+5/mgF/KoPzy\na+YXVM1iz70IqDmimimeN1OtJtWEz10CVC5Zlddl7kcBgi6RX8uv+jIpuKmAvuNtU2qrEvgsEn6m\nkk779ToVqCZx0AqROCvfxGPyHlO/mknmajUMi2IF0EfNcRyUUjJiNVvPpytfuy7aW2Y14uS4I/y8\nWkX04MEntk1WINtEgqt8qQrej/WP8MWKx721ZYB6gWUh2jQTDyqgr7eyYvgty0L30SPDl4Cpmyuo\nkEmYxRhKq2ZbZWl/KQgwsblu+JSy0d3ewoB0OAxDVEhqUdqH6ZT03rKsobbq+Ztp7SBPkFuLWZjd\n20LaLNvCzI55fWzbRmVzbbgtszA5tgpoanYC9BXb+8DejcTPY47J+qrxexWfn6ivmH7s438fTGB/\noF/SgS1i0YFlvrgxixHZJoCpXvLIMf1vPFHk9QmMA/jsMeUDzvk3HvNvmwCWyN/T2TLLAC4DeENe\nw3kAP2CM/bWPA/u+lEH5/bfMpYpe5nC896YJ9AHAexobICT6GO+/aQJ95zsubuT1TaDS59tyCUur\nTt8jS2va9oFcBivfFIDtqWEABwB2ZYY16tt/TN5j5U+SwwM4pNJp0vaAVqiWS+0aAcKoXLxNQL18\noQAOwD5zZuj40Qh/9ODBE7VNsvcBsGRVbmN5Sqpyg/oJIDfKZ6nwBdkvoK+9e+5c4qMVsYsv6pde\nXfvyFf1yq/DFwAGOLmp2gHpWqpfMfAvKqF/VSdw7pxkOKnwxHgL7J3V/+/Jjv7NMQTP9Wdsi1clV\niIO2Vedb2QX2jg9XQ19bJmwR0n7zpL4+6tneOWOmO7ctG4iA3WnNykjyle/dwP6svpYqbEHbUuHK\n3oy+ljcPbgJeDTOeHtS7Vf1R8CL94ia1DYOf6I6RB576X3/1uwCAH/0TfDbj7GkMyh9n7wA4J+uV\nbgL4GwB+Mzk853UAiRqJMfYGgP/smWRfZJZZZpl97sYBhJ+DUlDtnvOQMfbbAP4EghL3jznnNxhj\nfw/AzzjnP/h59vtMDMqjALlkosyNHDkjQb1R4B8wGtQbBegBJE9zKmes+s2AAH1qOWfsg8qsye8T\nIJCAJCrns5Df6gCGmumkZbWe74s8xgScUtu24xh+BQrSmTsFmagFgwEQRYgJeJPkTQ4C9FMVtQFR\nYiuUfnUd7ChCRCTrKrkTleUmCXcIOKr6DwwDwKrqOe17nwCl6WrWah/KVB5n13WTbfV3z/cN8E7d\nl3T+5l6vN3QvjGeOHC9SFcep5PgxQDGX0mYqpTeen8C8XzGPh55JVd2cAm9RGCEMQnQ7Zra7XC6H\nmKfyh3OdSiAw+saHjqfAxDAK0evrjHv9fl8Ai6G+F8k7Z6WAPk7+l5ZQS0fIyJ8X45z/EMAPU76/\n+5i2rz/JPp+JQTmzzDLL7HOx0fORZ9qyQTmzzDL7ahpHNig/qaXZFyppnMG0UL4UHsPYMFODWWKp\nNf/jEEFvuHTUCVL9WKHcS11ziaeYFsco+0IuKXOtlsG+UEBNheQIZiMYGYBe7tK2yleo1w2GA02q\nT82rVpFPIfiK3+ulEtQ7to14c3Nk8vwh9kUUAbUaQNgMSk5tpVgdluyzTfuhwheptiqKR/ehwhdp\nqbdiXxisDgCcsaH+9lWxzzWTYRC77hD7oiv3a6/eR5myL2wbuft3jba+XKoXHt43/F6vh/EN81jj\nStG3vY2AdDgIQ0ylroMKAcykZeiMDTMyZH/nOrsgolRYtoX5/WEWC2MMc3vmvbeYhZnd4VKZjuOg\nMrEGEGKQYl+UOgeYx+3EzzlHpWGes3pep5omE8V1jvDH4RSOugRgdQQgGdrmi8stPsSyUM9Euu3T\nZV88pX19gfZMsC9o/EoxLWgc+V2DfaFeec3U0OwLBzdyGm2lcdVbkuhPWRZ3ysPVfQHgvhQ3qP3O\nANigidkJg2Nbpnq0KSODMCdo/HRHtlUx5QqAPZIqkjJDDgmDQ4kmmgTBp+yLHmE+5HwfFkzWgool\nDjEqBgMxIBM2hCF8IewAIz2j7AdNGxmRvtGCAUruzajUm+zXkTHcNPvCsqyh/vrknP0LmhGhUmuW\nLuuXW8WGIwdoXn0p8av73HnplcRH47LNK19LtlVi/v3zms3Qkh/tNPuiIz/ylGVBhUEbRC6unqvN\n40TKLO/91D6ws6jl7SrN5yphZAB6wrG2pPugpNPryyabJpfLARzYruhrZslK0vO4jZ0pfX5KKLJT\n0b4oJiySSZ374tZOhMg5RCV/LfH16/pD4YZaOq2qu1CWBY0j07avv/odAE+BffGcWha+yCyzzL6a\nxgFjyfic2Bc+KDPGjBmW8gEAI0m7P40U+3Ey61Hsi8fJrEf5aV84aftp5Nsj/eks5NIei0Yn56fP\nLZERp1D8TqeDoNdDk4RAFPLvdbsYEBFLr99HodtFhwhT1Kyx3OmgSesKymOPdTpoyOW4CuOUul20\nyH7VTLDQ66EjwznqWlIf3W+h1UKHCEtizlFsNtEmApJkv9UqOiRcUSwW4dRqOCBhGJVIf6nVQo/s\nt1Qqwep2USXXR/UtFwQJNxmQietTbJyk8nUqGb0qREB90WPu5wgiQvJ8cc4TZgQwOpE8ICXKqZ0o\nBkv63QnDEDEz2ReOfPV5zJNZLO0g3UcwIMUXBvpZ6/f7iEKTCWMU5U73LcWOUhW85b/gqRsHRqqo\nnnHLZsqZZZbZV9eymPKT2UuvpTiX8QiZ9acB+qT0WgB9pOiknJ2cpJxWub38GKCPyq9VbDTfahn5\niVX8eIoCfbJtJVXZOQFJUn5gGOhLlGnpStKuOwT0qZlXLiXXjeIYzf1948ZacqbnpqTaVhTBbbdR\nIABVAnql+6tmtKQitupDPtU2mXmSGbHy+Y+pyp1LA6QA8ulK3Y/Zh+N5JgAJIJR/L+1tYpIsOjzP\nw9iaKSNWK5extRVzH2GIyZTMWs2ana1NQ2Y9FgRD0ukE6Ev1bZRPAdBznT1TZm2NBvosZmFu3wT6\nGGMjJdm2bWN6cgMgl1Pdu1L3AAupzACVpgn0qYRFM20TRPT9Bv4vPoNGoBH6wBHvVRq8i+0YsXPF\n9fIMzQAAIABJREFUGCPVM5GWX2dA35dgH7xlSh/18lCDdzGp4/dJQF+SILzj4KOcfgPpUvKmBIkM\n6TWR7VK/kl+r388CWCc13ajAQMmvLXKsnRmdO5cCfYlUWw3gMIE+mqHsiOQcLsi+Nwkw5JD+tkne\n4+D/b+9LYyy5rvO+W9tb+/U+vc6+ckgOSYsiKcuWxrKd0AskGTESb4ERCDASxIADJ/CSAAkc+Ift\nILETwEii2EYE27C8ChIEL7FlDrVQlLgMd3L2pbune3p//V6/pbabH1W37rlV9WaanOawu30/gpjX\n5513X1W9Wu4933fO8Tx4AHziSxMXaH3iTreL8uJi0p0aSJFeJLWcLjs3YjutiNYk+0GPuxibhqxa\nPbpyU7sgQzfJsVTGJUSoSA6h+1yJwxdNC+gckXWWBWm6QlKv6bbRlOxOrNpZPCbJLXF8aj6wclgS\naoLoWyC/hUsmA3Ok3rT4/RWiL34gDy0D8xOECI3t16cOgcKKe91Rok9cB2miz7ZtgAFzA5L8FeNO\nrKoEoAC10fDEbE0eyzdnu/DYEmr2y4nNb8g7PCXvgiCAD8ByCdFn9iL6tinNepdChy80NDT2JvRM\neWtIk3yKjUmiT4QpkNOd916QR9IB+YScmE2wVIvg3LrHai74HX15D1JQzMLS6bO+78PpdrHRaGT2\ng7XbWCFhiWaziWKjgVu35DI2qWDXbmOd+DLGYLsuNnNCNjxVF5oeC+EjwjjMMBRJoEKGCbvY3hTp\nJVYYpmkmsrDkO1N1j3uli9fX11HtdNAk4Y5mfKxObWxgc3Y2sZfLZVj1Om4SrbNIuS6121gloSPa\nxTq9b2lSz3GcKBWe7IP4nU3DUFZiQRAoxxFAkp4d1egmpLLBI+It1QHesI3MsbRtOzqO5LsASaRR\nMk2QiRwqsWgYRiQ0J9dcUlc8UFOyIyI0v1xBettECIRuQ8+O9dsFfVPW0NDQ2EHQN2UNDQ2NHQZ9\nU94anvnrn1T+FkuXP//9Mxje95pi+4s/fATDo68mvixeV/3FH5zB8GjkK0Ief8y+B0OPvCJ94+XT\nF0Y+gpHlbwKQy6s/G34SoyuS5hX2zw8+gbG1bwOQS9XZJx/HaF2WQBX2+cOPYeLa+ejzgrw59Bim\nrp9PfAVhRX3FUj743n0YuypJErENLz12FH3nZeF5xhheePQIaq9cRRovpuyu6+InOl/Fky9cVD4P\nAA/ta+INmgnMgFMTHbwzTzS78fF9cLSBN4lAQGxb+5U63l5Rj0NtbQ1Sk0E6eK+uKvY8WxKuyul8\nXUjZRKinSLqIC3u5Xs926gawUF+HQ1QSoW3jjeVlhORideMQydKteRjEvmHbuDkzA4fYREhibG0O\nx4jQIQgCTLTnMU8EGCLcMu0uYogIXzjn2O8tYVgVkQAADn9kCSXZFQumYWL8uxYU5QQQ1UPe98Qt\noKH6jjw2C6j9G8DBMfrknKLZFb9n3/QKJmfVc2Vo7CZA9sPtRqG0sen5qOFRjPIDDfy/L66icV6S\nrq4b3VK87gpQkFmwQRAg9NYAWxLCoVBfeKuALUnlc3+VbnH3Dws7Qn0hLrZul+HmFUOxuS5ww5EB\nLnGxdbsMhYKqvug8YuMWUTCIm0a7UMBirGAQsdHNYgkrpKSjsDfKZdT9KMYo4oPr1Sq6TKovhH2l\n1g8I9UW8Dav9/TCIEkHsB/UVDxynVgPLKZ7f7u9Hl6gODMNAa2AAXo5qoT0wAJf4NptN1M0qTNIH\nT2xbswqsu3I/GGPoFNdQH5AXj6iJsNkH1ANpF9vm9gMNDCvHoQBVOSGOewGyc7XY3gKANlFOCF8T\nsvN1si0pm7jJMajqC9/zwJCvAFkCsDkit61ULqMSApsTUg0hYsp2CHgHZTpzuVyO8r+J+kKoaQ7c\nAjhJZXddFyUHWJqWagih3ig5wPy4VFQEQYCSDcyNSfWFOK9Lw8CVMZmqbds2UAKuVaSqA4gVQDYw\nM3hU9TWBueC44ss5BwZUuzg+k8WLSuq0YRhAHzDvSfVFsxHXgykBN6ry+Lw920EXt9FnyYSbRjt+\nSoTH4QSyy7XrukBwCiaXdTaSmLN/EhYuJPYkzfqvcW/QGX0aGhoaOwg6o297IVUaalq2VGfQ11lb\nL/QqiJ9nl6qQu4/byzfPLrscqym8SRF3z0NIFBG+74N3RtAlSRNCGcFaw2iRKmSMMQS+D590NK6U\nK8l7lBGvVCpwnM1EuwtIrXSp0MGwIWfxTiFeNZTbGHWimbmYKTvNJiwyW08+U6/DjDtUi/0s1usY\nIJpvoTFuNRooEW025xxBo4EamRELlYhZr8MmY7RbLdj1ulLMXjQaMExT0XS3220UfD9p6wTIIkOD\njQbWSNU9y7LQv76O+g2ZbCK02c1mExsp326nmxQxAqT2Pa2yyVNqiJlruqO2YRgwUuqNXgiCIOqF\nlyqIb5omWPyfQK/rQEmTjiEUF0EqpT/pfL0F9UUeaEMLrb6Q2J3l/jU0NDT2KD6QmXKnk6q1Gj8l\nXfcIsUX/ep7aMFJMPKmvmIG6hZPAcDVj79ZkE0gRM+1U1eaSCZFVIU0y4zhqc+gYaX8oSyTWR2V8\nTYxbH1FLLIp9o75Chzp4kMMblLRXUjTp2CQoeBgCJ6YUzTMTM6+T+5Gew09eeg4T+2RdaMeOiJqj\n1YbiZ9tNjDqboKyOiB1PO2oNYNFo87nrdZTCSOMrZnd2XtfqlD2Jo6d8ReNUPjeXmdSEqW7WZqzd\nNlLpzAXPg5NKIbfj7yutroLOMcMwRDWVpi2Oe18qXdwwjIyvOE/G/FVMptKhp+upuslxxtrUajql\n2sT4inocxPkzfnIhCrwLO2MYs9V0amHfZ93K2EbNbD1lwzAwUplVxhUnTV95BZMjkugzmIGhmppm\nPVCOVhUTo+pxrxU38XfP9mFzkzSLjVdwrjul+AaBjzA8ABUie/cAqAT93LlsWvp7wi6dKX8gN+Vi\n8Q3lb7q0KxReB6AuZwoFWa+VhgaEb7JM6o6huCLHpsun0mqktKCC/8raC8lrWnu5r/5SvJ3xMnIV\nGNyUChC6lByefT0z7uic7O5L921kNto2sQQs3BiGfVNWO6PJESZRX3DfBwfAXpLESUhIL/6CJEkY\nY7jV9jG3SDo/l+Wy/tU1Sd5Fy/3beHtThgjo0vlSV15YDqKldvHQTbT96OKiy2/3sPowStvpErdD\nUpHNOOTAAFiEOBO/v3lMpvV2SEgnIGOIXoJdkkIuwhdtAG0SFhHHeJ0Qk3Tb1kgYRpwTdRJCEeGL\n2w1gY3g843txVG6D0iE9Td4BuEbqJifnjwnc6MpjmdRNdtXJSZJS7R3N2Gb9Y4qvaZrAJjC3IY+v\neAhMjlzErWVJ9IkJx/yKnJzQinrX5uQ2X7jQQddtoFK5ntg6pKFEoSCbBnDeibdFEn0ynAdYlrSf\nPftpAMCzz+LeoG/KGhoaGjsM+qasoaGhsUOgZ8rbCxm+UNnhPBVELxY3j2HuVRA/zy6L7+crQKii\nIqn3wNTi52JJaRhGssRVWssTJPUuggABrX3heTB8HyGp1pW0V0ox+321GuzAgU1CFkKH6zibyWth\nL1p19FtS05xoj1kBfY70TfTdtoNKoaLYDNuGSVo1JcfNtmHF9SNEiMC0bRikpgStk8HIceOcI8yp\nLxF/CCYJnRiGAcNxYBEViSiFWVpfR4m08tpoNDIKh+W4jGaf56FNity3221Ym5tYJDFssQ2toIVl\nonqpVCroul00SH2SWlxtMAzVAvPFYhHMUPdNhDRMQ61dIVQMNLwmxkzD932ERpipEUK/J/35TAF9\nHr2nqIJiJU8QBMlrAPB8D0GoKjLurJrKNrjQyGLH3pQ1NDQ07gl6prx1bE19Edk8QmQARGmhEB+x\nrXgSGKlkfWuyRq7B4uy/vh7qiyqpIxvPWBpDRxX1hWDVqaJCECRrw2rmlaiKtT58KLH5XnSmpNUX\nEDOOkzLTC4iK0RsPqMx1Mhs9dUDRNXqFAva9zXFgUJIzjhMRZAeKajXzgrWGQaOOI5Zk200Wd1XG\nvFIpzAijb2mszsGKRQqJJnV2NldbyUh1NjP+PY2UokKkwgczM4rOn3OOgHweABKKPtXB2whDsIUF\ndRvESmJhAXSeWHVdlNLdpWMCcYB0MgeiDtUjqWYIZkxkHTA3FfWFHbRxeFNVbxS60ax5el39Pqfu\nZArXi/Nn9MgckJIk5ykqOOcZ9QXnPFepYZlWRn0hzstaeRUYlQQyA8NIv3rcB8rR6mFqTFVFDFXb\nePYb/Wi3JYkpr2VVfeH7fkZlIfC+qi90Rt/WsBX1hSq2l+oLqqgQvsmSqDOG4vLrub6llaz6ohzX\nuABU9UU1rnORlG5cBQZb+eoLoaigtn3zMnefhkj23YrsInEhrb7wyNIZL0qZUihKJ347y1wbKbtd\nq2Fxg2GNqCxoyOKdllQM9Jl9OGLdxFVf3vAdIw4LMOAGlw8dUVS9PQT4I9GDMglfAAiJcoIuUfmJ\niNmny+GAKCpYPIYJwDghVQDiuNnEFhBmH6Tzdej70TaQrtwifBECCIkyRJT0bBKlxjLpArJIk1JE\nh2qSlCLCFzcDYKFUS+wiceWNmnx6i/AFAFwalTcpkaxzY0puV3L+2KqiQhzLtKJCXB/UV9jSSo0C\nK2TUF0kJzdFLmFuSdjFpoYqMpWV5fC7dlPtx6VILrU4dpZIMtdHrtliU6otOp5NRWQi8r+oLndGn\noaGhsYOgwxd3R1465btJt8zz7UUe9CL17hV5BGAya8whZQCVwBHp1FtJRQXiNNkUESYKwoeWBZuQ\nVkkKb0ESYZYdb5tpJK/jHVD/hSxGHhohfFJKTXbtDuAF6prQShFZSUF88rl3k34LRAV3uGUpRe7F\nuF3HQYGQepxzuMUinJwiTEaxiAKxm5YFc3UVNiH/kk7bnodR2pIqDFG9dQsGmVWLVG+73VHS00WB\neSdVqD8PrutmGhmIbUiTgmKf0+evaZq5HbXzitznoWf3dYQIeZicB0DvbtZ3TrPOlhvoVQZhK+UR\n/iFBz5Q1NDT2JjTRt3WkiT7RJFVNqc4n+sS0jvomhF6a6BMEYD8h+ox7J/rE7IQSfWJGszqUTiVF\nxu4ORjOkwQMcLiX6xMwpRfQxzjPp1GG8Dfz4FKg4quM4eL79PfjZm/81sdlOREDtd1KpyKYdEX2Q\nRJ84luNGKg04ts9cW4fDozh4UnYzRd7diQBM25KOximiLzRNuKQQECBndx5p5SSQtolxnZs3lXFN\n14V5SyXIKqLEZooA5JyjlErfLsTx/UlexxRNszYNHGykumyLlPUU0WeaJiZXF1XfOGY/dmJeIeQM\nw8gl+nqlVNeMVUxblzO+aaJPtICqVVYxvU/1Hx1Qxx0sR6uDkcEmAEkk7hvo4mvPD6BLMj8lEZ8l\n+oIg/9pI23Wa9QeANNFHlz8ipZou1yjRp6ZZR/ZkOZwi+qhvceV5ACqh916JPrpEHZl7I94nGUIY\nv50lM6hdVCVzbg7BmbmevO9S9p8QfTwMM+nUhghfADBelhdVsVrFU2vP4I2GfIrQ6mkXO3IpXiqV\ncAQ3cZVcFDS0cC0kacCxOqB8+BqWYgKQLpP9o/Lh2YsAzLOJ70sTfeIYFx+QdUuU8+SUfKgmdTVO\nygdqEr4AYBJfkaodkO3dJL39NknXafEQaOaEL261gbV+eYzFsXh7sEfKOiH6xL5dJTWWkzBNKs1a\nHMuZ1OSkV0r1tHU5YzMMI0P0BWF0LKf3XcbsouoPQLEt3hYPkHlcuCbrW1+50kKrvY5CQSpU6PlT\nLMpSASL92rLkOUxB7dtK9O1C9YWuEqehoaGxg7DlmzJjzGSMnWeMfTn++zBj7FuMscuMsT9mjN2d\n4dDQ0NC4XxCSuHv5/wPAuwlf/ByAtwEI8eWvA/hNzvnnGWP/C8BnAPzPuw3COc8wyXnMPFVW5LH1\n75Wx7cU6y8Lzkv3OswGkeHm6QHgO8lKyk5RaUy1eLsIMrm3DSbWq6hSLKBLFgFgaN0slVElLKdM0\nYTdtGXqB1J4ysOQ1EJUQ5Yba0p6+T2uF5qXP0tR1ehzEcWXkGPdSXNAC6gFJ1/V9Pyr2T7TbYoww\nDDOpvenUYPHaDgL4xLdQKACWBYuoOibillPhxgZqpP2UYRgINjcxuF8mRwjFxOCtAINEK93tdlFx\nm9hH1BtiyZ5WZYRhmDn/kuOQk7YcmtnC9UD2HGaM5V5feWoPcf6Yhgnbkudgo9mA7/tKtbeV1Siu\n3h5vJ6+B/DRr8RsFgfobFQoFcK6qacQ1FQRGbir4tmAXxpS3NFNmjE0D+CEAvxP/zQB8AsCfxS6f\nA/Dp92MDNTQ0NN4TBNF3L/9/ANjqTPm3APwCAJEaNgxgnXMuNnsWwFTeBxljPwPgZwDJ1neOfl/u\nl7j9DwP1mCgR6ZoDZ4D1sawvtQvG90c+BPAc9cUDp6M5Pkjh+1MPAISPE/bOyVMQPRy9eBY78QkP\n1XlJ2lh2nBJ7fAb+pbjQuxUXSj9yDbhK9BDxuMcPXwOuxd2Y/ZikeeEwGrMy60vMhtafOYGBGik8\nbhhY/dvjGBqQ6bCCAFr68hGMDstu1gYz8KvPlPGo/c3Mvl2e+Uc4tl/OdEzDxKs3fgCPHJRKCzHT\neefGx3DqYD1jv/jJH8d0rBgRHbxnT0xj+qJMzRWp0zPHp7D/0pyyDTeP/QscuCzVD6I79Kdf/gIm\nL0vCkoFh+ugcZonCQYwxfWQWs/TMZTm2GAd+aBbzSnF3hsmnZnCrSU3RuBNP3MT8pmqf+LBqE7/R\nqY/OokHsfuBj7Il5pbu0mAlOfvei0o2ac46pwSWAiDXE8X35Rx7FPFMby359/yPonyHZnrH/V6ce\nxsCcmgb+7NRDGRvnHL/5lX+J/hU5hjh/Xrr8MD50TJLjXbeLd26dwqlJeXGsr0Ub/9vPPo7pmuzq\nvtnaxEtX/jE8T63nHe37gwDkCsP3DbjuacUmZvlp33PnZHGre8IuJfruelNmjP0wgEXO+UuMsbPv\n9gs4558F8FkAKBQKHACKxddTTvG/TgVFUeReGJ0qCtRf+NrVnDTrCoqN5+m2Ry/qUn2RLKM3ZOF7\nxd6QqgwRAqiuFNF//XziW4orooUD4zBmFxSbOzgM5zaRUYkHxoC0i6XhyuwozDdkBTLXi5aXVlCD\nY15P7JZlwfFqKNpS9lUsxOGLTg3VRXmTMy0T8xsOLpTlMlw8DOe8KnhXPlxs28ZaWMYVX975xMW6\nEBZRCGXKsWXEVeIGJ+AejsIlouB7MDkMP5B3PvF94dQQQh4dF3Gj5lODCJl8cIqbHLs9BZOrlebM\ndcAckCqARKmxBliDalq3uQbYpCtz8t44AGJnjIGZAAtSHZwBGAZghKqCw2CAyaV6Q1TvaxjAnC+3\nodvtAg5wsz/bzRpl4GpRKi3CMAQqwBVH3ojEcZ9nY7jWlqoXx3HQ9QzUXbUqnGmaaAdAg9x0GGNo\nB0AzNcMLggC3GxOoL8iwhghfNFrDSkp1o9nAwvI4ipDhi2vXIglkPahiyZSJOEtLLrzWKmxbnUBE\n6IfjpCcR/YoiQ4YEVd+zZz8FYBvUF7sUW5kpfxTAJxljPwigiCim/N8BDDDGrHi2PA0gK5rU0NDQ\n+KCwV2tfcM5/GcAvA0A8U/53nPOfZIz9KYAfBfB5AD8N4IvbumW0q67SbJfUSBZv0Pfz0ri3QMjl\nQZIvtkJaJDWAgwB+PHMy45lOEIRwia9N0mTFUl3MMA3Gkt53gGy5ZMKEY5M0acuCGaq2hCx0s/V3\nWaqmM+36TcnROxJOgbrPlPwUM0AxkuvVEv0u/T63W0nqCydho5EyGhskYYaJZCAPrZa6vPYDP0lJ\nFzYgS4aZpplJ95Wp3uo+m6YZzazJ8RGJGwYM2Iat+JqhKYs0gXSdDiyU7JJit5mNskUI1njWaNsq\n8eq6bob8o8R29jdiufWTeWggoCStYcS+WSI9IszluL2IxXa7DT/V7TvxRQAvlL48qnWQqksutoeT\n1/nnWm498+3ELk0euRed8i8C+HnG2GVEMebf3Z5N0tDQ0Ngm7GGiDwDAOT8H4Fz8+iqAJ97Ll3b6\nnsq1+4VpdGrxe/GD062cVnzE7Dgo7Ec35sgSQm/yNHCIOMcTA39sGp0z0bhC8tU9/AAoxOzE2zeF\nVrxbom4yL9sY/pBMlTXELOzYSPJUC+LZajhaAU5LWRSPZ0v+ARmLEzOIwVoLV16R+ydmEXVfbUJq\nBAY2/VHQXsKWH23DckdNyQYDGmUXc3MyHVbs29KSSqAwxrCxYWN2toI0lpaKGV8AKD42gqV+lT1Z\nnxxKbwIAYHOwisUj42IAAMDahOor8PAX3kKlJdk3wzAw3k51vo6PZX93DdiQsUmDGRht5qd69x1d\nwaQpY56MMQwxNSXbiH/FQahp3UZooMwXMUomqSI9eZDfUFZoAQvQx1aQsMQAfDu6qtN1jwMjwIC1\njkPF60jj8tAReI68LANmIBhgcKFKxhhjcMcY6LyKMQa/H+ik+5szYMWvoXu7X7EBwGqzhsuQ51Cn\nM4KlpsrZNxCdzy4mKY8Jv9hBgAOATyV88XYH6TRrA553UrGJ2XEQTAL4cGI/d87FtmCvEn3vBygZ\nByA5uTu1p1DciN5TullvfJO4RvZuTdrFTRm3VN9EUXHmKRRfi8aly9bSG1mir4UnUH4zIvpEWGB8\ntAz3bXnBGjFJYgAIX41uBqZYnp7eB/MtWdfAJunbzjvRjV0ss9eefwD7CrL2cuDL5feoLTtiW5aF\n2wDGCm/LY0L0npMV9aYzd6OBqammYhOgdsMwMDtbwfR0NvQAAPv3tzL2jfPLGI3t9NLfdyX7EFg8\nMo59Vxcy445dJTfb2P761GmMufKxI8IPN6rZlGNsXMFMTaYdi990lpCCwneyeRG3nBMZ3wVC3lnk\nMliEfEiahonREFgyHkxsIj0ZDFhk0tf1XQAXMM/ljafjSbKMpkm7rotDxeu43jmU2JLi8KsO7Dbp\nam6acGHCuaEGR6Pz1UDhphq+6IChOKOGAhhjGLY2UBrbUGwAcBnTODYmlTNr65EkZKqfdE7fmAEQ\nCUv68FJi9ztrAB6FZclyBTREYtuyW7wZh4gKBfl5GW76sOJ79uxZAJro09DQ0Nhb2KtEn4aGhsau\nxC4l+u7rTTlJAU0RrZwYqLpC/Ku8H0rFhXid+KbY3UQzSYrc53W47gXBOodBNq0XAOzAhxerA5JU\ncd+HT9sWxaGOMAzhxQqGZLsYk6EXyOphZqgy85ZtwfS3Vrg+Knxu5BY6zyvAn05j78WOi6VmGIYI\nRPp5EhMMFMWJSPzxg0BRTwDIpPCK7UmnTnPOM8edpuDT7bQsS0ljB2SYItM12rJh8kgpkd4GMzBh\nm9JuGAYMXz1mQolhd21FfWGZFmxfVV8k5wmzUbJUDbaVKuAv9jOtDIlUC0ZGfcEYy5zDnEdXQrYg\nflZ9IdQyadXLxsYGut0uNohCRvxevuWj48vfLk9RIYJaWXsQ9V0kCpleafrbhl16U9ZV4jQ0NDR2\nED6YIve1fPWFW5bESdLNuvKg6hQ/UL1qyg7Am3pQUV8ketmjclwWzxbcw6qqI+lyfVgtfg8A7EQT\nxYosvJ1oVU/IdFgmirocHVYIsEDMBA/J7Lgw3q7myxNwu7Imr9jeVVct+m24BlY6+xWb2Iallspy\nM8awuHoJqJeRxuJiIWOr120A0lcc97T6IpnVVAZQPN6v2DamRzPj9rKnbWL2W32tg2OdWcU+0b2t\n+Jpu3Gm7pXZsNk0zo74Qx2do6KbCSJrcxACuK6s1I4hVHeE1ULCQoRZcVW3xb9TnXVHVF0EQfZ7M\nzHwW/TEEdRt8288UqA+MaAZ5YfAg3IKcKXNuwB/PFuvxDQZvTJ1TMcbg7ssW6TIMYNmrwV2Q6guR\nPVpvD+IGaXLe6oyh7qrqn7Z1KPqMqV4zQclDWD8IkPZgYnIcBGl1kwHf76W+UK85rb74ACAUFgI0\nPCHUEz3VF0QY79SfUweeU21K5+vXojEU9cXrUn2hdLl+U7LJAMBH+9B5U16wNLTgvRTJq6w4zZoB\n4K+RtGdS6FyoMpIbkTsPuyBv9nR7x4uy9oAIT1CVBQ1PTPfJmhGGYQBDG9hfU2slCFBFRYSyYqNL\nTqrKSAq+b65j5FKk4AjJbzR8idxkqJ3UxMizidBA0yvicnE6Y79azikED+Bmn0xnFr/H3MDxjA2W\nqrSwmQ1wVTkhkkcAYNmUXXHE77FiPZyxIQRW7TOJ3fM8wAeWLfn5th8nYDDkqjKoIkOEL7y1Apyu\nXOKL425fV9fh4nwt3MiG64o31VCAZQEj9gbK41LQJsIXN1aBg0Py3F4Ko/NxhDSiCOry4Vjy5TUT\ntjcB3oRpUhWTfCioqoy4RgxRWdBrXFVffA+AbVJfaKJPQ0NDY4dgl8aUd+5Nmee/ziPqehF99DOZ\nur6pDtd54/aq1yxSjk1SZ1kQWlbgwyfkVjJG4COI7WIWx8NQ6l4hk1WiD8qXBouJGlLrWLRnYowl\nr4FoNmlZltKKSCDPnraJfbcsKymyRO1d20ZJaLJjW8O2USFpxEJ73HAcVOKOz4zYqn19iavQcTuO\ngz5iN00Tju8oHaPFcXM6jtLiyrZt2JtqKrNYSdiWjVJRTYc2PRMFW866RUjL4CppyhgDC9VUePmm\n/BwQ/XYsZMpvmKRvcyMp6ARExzZNuiaFmVLEK+c8Q2L2AouJ47RrGPL4GpDn+2ZLEn3iNRATfbyL\nDVcSfeLcDpAlbuOtJNsriD5lwQTOw5jQy16f6TG2Dbv0pqyJPg0NDY0dhJ07U9bQ0NC4F2iib+vo\npb7wC9NA7SMAeqsvhN2vPoQ0/OmHctUX3jE5hh8vDd0jKpMslqK0JobQEKfVF0n7+pPjiU0QL+Zx\nWfcCQMSyAMAR2bIpiH03X51C15VqBCMufp9WX5iuiYY7rNRGNTvRGIubk4qvZVpYa/vANbVm2/S6\nAAAYOUlEQVRuBADMz2d/7rU1E0C2WtnCQlbnDADmQBkLh/qFc7S944Oqk1CXDFSwcEg9HqvjA8rf\nJqlnsf8u9SwSRcVGqnaFaWBwXa1bIUI6/eVrCtlzR0WFfwXqG7HKIgdp9UUYhuj3VfVGwKMvHoRa\nJ8M3ffSxFUyRqIjvROvstwcPoFsgunEOBAMG3EOpTWNZ9YXxLmpftNrR+djoDgOQJGSTT6GFE8r2\neoWImAys/Ygq+cbbZoex+oKqJVh8PKbg+7I0DmMso7JIxgmn4HnSd1vVF5ro2xp6qi9qH5HqCxL/\nKtSl+oLGjJ3159TPzwL2+jeS92lsznk18qVxvOLrcjsU9cUbEWuc9KJLqS/ouN0XrkfjE0WG//JM\n8tqiMdzXIimXGftWOnOoOaROBlFUjJek+sKxHcwBmKrIegT0+w7U5E2mUCgApXUcnso/sQ8fTtsd\nxUbj7Hn2tfUWxq93hVFu73W5H+KmvHBoX2KnMdGJG/IBJ2LK9cLgXetZ0H2eH5Y3EnHcFkdPZ2wo\nqIoKMS5VTtDY8KpD7KKIkvMIMghVu+AWVmyp1OgG4jgBt5l82HeCDqZMYC4gRfLdyNdfK6BACtoH\nQQD3EOBcz6t9oaovTJNtufbF8ooosHUSE32yiNLC5gLAgT5GalR0RduUj8LuyuvL9/2M+oLFvIfv\nP5FbE8O2VWUTAHjeE4p9W9UXOqasoaGhoXEvuO8z5SgV9L0zrbkp2SLdukdXZaq+6NXNOk+VIdOh\n1Zle8h3EV8yUjFTna9FB2AyCpJWQaI0UhiG4J30TvSxXVwqGSJOlzH48w0yz+I7jZAqoi/2wLAPF\nIlFwmCZsG6hU7IxvocBRqxGNdfzdnVIRQ0OR8kGEHjYqFYyOjhLfaDbarJQxPjamjNusljBBkiGs\neEZb7evDxIS6zVV/AePj2RBRuTOjfJ9hGCg1SxgakmVBxe9VKBRQq8k+iCEPYbdslMpSkSGUD0ag\npqeHQZjpAO4H0e+VKdge8szv1qtUwHZAlCtIn+95Kdndbhee54G3ZYB1sxkpLlzXTV4DQKvVgmd5\naPlSu550dbfVc5tFLeWVayNp3s6gqECSS4YcBlVRcnd1ybvGLlVfaKJPQ0Njb0ITfVvHg5/J0X0C\nGP7wBay8EL0nnqgjT1zE8rflZnIezVpGn7yEpW/Ziu+xp1/C0gW1ky8A7H/kG5gZjZ78YsY29fDX\nMTcqfYV98qGv4taoWmRo9uRp3GI1pLE59QAq7ajGsYhLNiceQPVBWfdYzO42xk6gdirKyBMz25Uz\nR1B8Qc7YOrHdfaCK9bdlWvWmbaF9vITlS3LWKGbVzaMOFq7IVG3LtrGwdAC4IAlAMSOZXZ0Ebshs\nQ2YwrDSAC9eR8b25PAFck+nMonP1re4kupV1xXaVD2CjLNs1i5XA1bAf9VJdGfdKUEO9KGObye/x\n9DCGZ2QcnTGGmbF+FG7Ljtpi3OujNRSX1hXfq5/sQ2lJtocW8y42vojKpoyPcnAUqhdRJd2sxcyy\nVLuMkHSq4pxnbMK3z76qdKPmIUd/9RpAxhWz6qH+m4DcDQRBgJHBWeXzYgb6lUNP4RppXBDyEGvj\nAxik7bARkdCr4/0YIgMzxrAyVsMwNhRfP/Ax0z0Ic17OoDc3oxVMK9iH5a6MuXeCw3CDVDq1KQpz\nPYxUrX2EwTH4vhxX/M5B8CAAlSyObKk25ACC4LTie+5cLy3zu4Qm+raOQoroE3BaB1CImXUhMrc3\nD6KwIZl10ZPMah6CvX5d8bVmhmCdv574ihPErEzAfiW6wYgbol0ZQ+G1bFF1pzKK0hsRESV66XE2\nhc4LpEN1DNcfhHk+IgDFzdfzBuG+KrdXhBECbxDBG1F6sR2Tf+UzVQxa8gYukjgsx8Uw6fpbLpVg\nlV2MV6XqoBD7mn0upgfljbZUKsEfP4LDpBpXEoYxOY4focSQiQvmBE4eJTdfM76dmcCp46TqmkhW\nCV0cud2IfSNbxyviyLpcAotj0a0VcGxDfRh2+wo43pAPQ0H0GWOjWJuSCR2GYSAYuIG2fTAzrle7\nBrd4mPiacPuuwi/J1GuxMm47awggCcQwDMELQCP4jsQmwhfcATaKj6m+DlAvPJrYxM2TWcAaIQWD\nIAAsYNmWN7huKBMtKNHXDbpAeAeib0kl+iwEGaKPMQYboVL83jAMOOBK4ftocA8DbBWDQ7LIxVIQ\nnePLmw9lU6oZUOTyGg3bcSjDAUz3a3IbwODzrkLoyZCEodjzbNRXJfrOAtgGom+Xhi800aehoaGx\ng7CDY8pbJwFkinSP1GlK9IlZURgmrwFZuY3aQ1G/dwvj0vdozdiEJCEEoCD/giCA50rZmU1qCwf+\nnR/xSUftVOdq2bmYEHoWqS1Mu2fbWVLQduL0ZNtW0qyTtGWSOi22t+A4qNEUaWEnJJsgBQtOAf0k\nFCS+u1gsYsBW+81tFgqo9PcrNgCRnXwfwADHVlKvwzh93TLUNHLP82Ck6k2L3zDd+TqPTEt+T0Ml\nvXzfj35PUv85qcedqhXteV7GtxcBHQRBplO3sKe7fXPO4XllpT4yADSbTXQ7XdTrMtQhuoy7votG\nKAsVdd0ufMtH11fHFf/SYyHOta2kgOdBdlnfWhr5e8IunCnv4JuyhoaGxj1glxJ9OnyhoaGxNyGI\nvnv5/y5gjD3NGLvAGLvMGPulnPd/njH2FmPsNcbYVxhjB/PGofhAZspDHzmQa+87LVNyxTKp9uCY\n4iPs/Q+NE1u03Bt+uIACslWsRh+WKc5CMTDykNrqXiz3h07LlGFBZF3cfwBtL7vN7nHZJVksv7rH\njis+3Xjc9lGZmZYQVkemYJhyqdqJl9SNg2rh+s2Cg9VJ9TjYdrTsX9yn7odlWZjbHEJwVYYkhDJk\nZm5Y8TVNE0srFbx1cZ9iA4BrN/oVX3F8Fp828FqlptguF0q5vhcdGTYQx+eCrRbaF983YK+h5ahp\n1R1nRvlbjNF21DTrPFtS6S+4hKItlQu2GaDoXFB8C1Z09ZVLlxR7GIaoli8rNr8crYf7w2tgruo7\nWFZTvYNyNO5wVd0P3/exr/+WYkvCa6NnsVIaUOyNiT6kEfIQzUn1NwIHOkNlACOK2XVr2HhmChsb\n0l/Ueu6GE4D/ocTuWW0E5sPK50MjDq2YBxHI0wqcGQj4MSAn1BakFBx5NvF7+r5qP3dum2IO7zPR\nxxgzAfw2gO8HMAvgBcbYlzjnbxG38wAe55y3GGP/CsBvAPhndxr3A7kpr34ze1Gl36OxK+pPY2vL\n37gOQMYPaxjG0tfVk11gNrZbJP566zlZH4ImYCw8H6UGi8QG3r6J0vnl5H26bcWXI7kVjeGWzr+c\nvKaxy+prrwKQcdSW46HvTfn70dKTQ2/LG4QoaTl+RR6HMomf7p+R6olisYhOpYojR0inFBJHPnlM\n+jq2g7cu7sPpEyTV25Hb+9ADcp/FfrzmVnFmM5Jc2eSYPdaWWjCT2L+jG8U3TXJ8Hnel+kIci2Fv\nEOVA7pO4YCudkxlb2i44h0pH1lYQ5wQ3rqLjSV8Rx211PpzYaFx2Y1OqL0TMeL3xSMbXcICVzYcy\nvouN0xlfALi1diJjn1mWqpAk+WgIGF5cz9gHr5H2IJDXwcAVqQqKzssR9F9ZVnybzSZq/hxKNXlt\nrHjx5/wPoc+SkkHfj3R6tp9KpwYQpNQXpmECrAvLyldT5dmpjV4zti1Ttc+e/RiAbUqzfn/xBIDL\nnPOrAMAY+zyATwFILmrO+TPE/3kAP3W3QXVMWUNDY2/i/ZfETQGgy6BZAE/ewf8zAP7qboN+IGnW\n6YLWeWmaYvaTZncpSSteJxNXTv+g6dAcXCwPhcoih+UW9jTTHaaYcrE9YRgqn0vblDEIA5+kZqe6\nPYuZQ7rjs1MoRL5EqSFaI6WVGjyuLp6nFsl9nVIXQDmWyPmcHDsgioGAqlBIWq7YNi5Syy1VtSBG\njY6F3D/GGAJbtYmiNoEdJAqWyNdAYIe5aobAyiofwpRvooYpquN6nge/rCocks7Ohvobua4Lr6h2\nhhbvuxU3ab+UjOv7aLfliiHZ3tQ54ft+RmWRfJ9XU77P8zx0u31KJ2oAqNfraHfa6KzJbJVWrD32\nmIeWJ8cIggDczF4DucgRTMhrNU+VkaNugSiI/z4Vub93om+EMfYi+fuznPPPvttBGGM/BeBxAB+/\nm6+eKWtoaOxd3HtG3zLn/PEe780BoB2Np2ObAsbY9wH4DwA+zjnPa92iYIcQfXE929P7Mr5pm5hR\nUKJP2CKir4M0Rh/Odoym5B8gZ6nDD2aL2lw9eAiunyVNvZPZeKd7Qu3Ym2SyEQJQ2IJj+2Ga8qzx\n4o7YrSPq8ekWC6hPTyi2DSeaKS+Nq6SO7diYaw3Dv5YtSJQh+oyI6MNFSSImRN/NFNEXFyS6+jEH\nqMatteJ9vlxUO2eLY0EJQGG75OSTgvsKdXTtGeIPuCX1/E6OcTF93jO4RbVBq5h5mfwKyoGcIYZ2\niFLxouJbimsZVytq7eQgDKLUaQIxyx9iNxWiLwgCjNbmcn3HB9Xa1mEYYmJI7dQttveZcQPrpWHF\ntzWl1qAW39c5oJK8YRDCPTSS8UV3GN2Xj8D15DhuvPE+ptFhsr554HgILZXoS2a09hnlHseNPKKP\npk6ntzlry7NvG9H3/uMFAMcZY4cR3Yx/DMBPUAfG2GMA/jeApznni9khstgRRB9d0qw9L4i+fP8g\nkD/YynPXAQC+H50q/Smijy6JZr4WXTA00WLuG5L0MnMIQGEL2tfhvCiPJ93ewkvRyoaSFoL8S48r\nCEBBKnYdD6VXX5fvk2SN2usy/boWJ1CMXpQ3CJqsMX1D3gzKlQq65SoOH84n+k4clcfHsR3g4hge\nOCFvEDSRhBJ9oncds6s406xn9u2RlkxAoKSeIADp8fmODknJjo/FQLcfhS5RjIgqb02pWqGdkoub\nx4hvNHapJR98MnxxFa2O9BVhi0ZLplnTMMTaxpmM78raQxlfowzcrktiUYQ95laPZ3wB4MaiTAsX\n416dlw/fJHlkKMTALUneiRt77ZL8Pen3Vd6RN3wxbvEt9eHQrddRaB1E0ZZ1t5tu9Lt02FNqSrUb\nE7OE0EvCVSm7aWaJPnpt2HaW6Muzpe3bSvS9D1GRZGjOfcbYzwL4G0RVQX6Pc/4mY+w/A3iRc/4l\nAP8FQBXAn8bH5ibn/JN3GleHLzQ0NDTeIzjnfwngL1O2/0hef9+7HXPH3pTzCL34r5zXhIQi7+al\nh4YkJTskM2lGU6fF65wUaUDOEHulWed11M4lBYMALiGckrBGithxu10EfgCX2Lox0RekCMBisRgT\nb3KhyQKRQs4RBoTcNAKEXCUmPT/aniAMktdApIsV3ydmaYnO1Ckps8KkDZddRCsmsxKb6WCTpgGL\nLtnlLjYaMg3YMAzA7sJtSNJKHPfQduE3m8TXRGC7CAmZJs4Jv+QphJrneSg6qk0ca7+skneCkKO2\nhOhzsnavL5/o8zzVHgRBZlz6HiUbgyBAGKjEpNjmwA8yJGTgeQhTadatVivaF0oKuvHvbKm/s7hW\n6CozaYsW//deIAh+Zdz3K7V6l0Nn9GloaGjsIOibsoaGhsYOwh5TXzhKmrVYKu07I1sHiULpGfVF\nj/RrALhx+DB8or4IxLL9pCR6kuX5SVV9kafKSJZtJw8padZhTMh1jklSCACCQjEn9ToKX6xOqsdn\nrVDArfYI/OtEfRETYbPzKjNvmAaWV6t457I8liKEcmNG7VCd2L+3CPSLqmoRrlVSacDx/l0rV6VJ\n+BIbxZG+FphDFBSMATWV3Eqq9lVvgwaIOGMIq9nu3QDgGDdQ9WWGXBAG6Kuo3awDQRTXrqv2MIgK\n1BOIMNaoNaeoL3zfx/jQQq7v1Ki6H5xzTI+qWXcCX5+00CiRcgMhR/tA9pz0fR/u4VHFFvg+wmPj\nGV+720Hw1nG0IdUXvhVn6Rn74VrfKcdgQUZlIUIWoZ1Ov2bvQn3Bc2z5vtunvtidFYl2rPqCgtqE\n0gIAVp67EduiA9+PYSxS9QWJ7Qr1hUEUA7PEV1FlxOoLsVV++xqsby/k+jovvhCNS9QFQpGRtqdT\nsn3Hg3P+Ffl+QdaFKJ+Xhcf7Y/WFknpN+s6NX5XHp79WQ7dUxcFDpIC/KX/m40ckM2/bNt65PI5T\nx0i6uS19T5+UihOxz8zsx4P1KOWX/m4PbpCuH8T+UGxXbA3SRSN+cFYqZfCG7LghHp5YlTJQ8duF\nAIw1+WA34gL85vohOW4cU3ZLB1FvSruIza7VpcqCxmWXVk9nfG8vyYdvor6oAXMrxzL267cPZWwA\ncHlO7puI4V+ckd1hkveGfPTNLGZ8KxfUG74Yu/CmfJDx2Ga+el3x9ep1mI2DKEHW/BClOV3rO+H4\nzyV213MzKgsaR6Z2wzS2rL4QE6St+G6f+mJ3VrnfsUSfhoaGxr1hd86U2fuS3tgDjz/+OH/xxRfx\nRaTbxES4gDmcxNRdbb3s83gLp3J8r+MqDuHIXW297L/fmsr1fdbz8XHbuqutl/05o42PWVnfr4cu\nvstw7mrrZf+7X3Pw3UYh43vua8DZ77677U72Zx9zs2O4Ac462b6LefZevpPOH+DjKfsKXsUwHsn4\n5tl7+Q52voAhPKrYuH8OzDqb8c2z9/Jl9XMw0vb2OaCU9c219/D9P6XDQFnNxH0J6/gQsgkkefZe\nvl/6HwO59nPfAs4+eXdbT9+/6uT7nvNx9qx1V9ud7L/yK6WX7pBNd1cw9igH/v69fjzG8D1tw3uB\nJvo0NDQ0dhB0+EJDQ2OPQocv7v5ljC0BEJXARwDkU9C7H3rfdif0vu0sHOScj97dLR+MneGpZLv3\ngP33PXxxX2fK9AAzxl683zt7v6D3bXdC79texO5TX+iYsoaGhsYOgo4pa2ho7FHszpjyB3lTftfV\n+3cR9L7tTuh921PYnckj95Xo09DQ0LhfYOxBDvzRPY7yyN4m+jQ0NDTuH3bnTPm+E32MsacZYxcY\nY5cZY790v79/u8EY+z3G2CJj7A1iG2KM/S1j7FL87+CdxtiJYIztZ4w9wxh7izH2JmPs52L7rt83\nAGCMFRlj32aMvRrv36/E9sOMsW/F5+cfM8ayaZS7BIwxkzF2njH25fjvPbNvexn39abMGDMB/DaA\nHwBwGsCPM8byG3ftHvxfAE+nbL8E4Cuc8+MAvhL/vdvgA/i3nPPTAJ4C8K/j32ov7BsAdAF8gnP+\nCIBHATzNGHsKwK8D+E3O+TEAa4jawu9W/ByAt8nfe2nftgBB9N3L//cf93um/ASAy5zzq5xzF8Dn\nAXzqPm/DtoJz/lUAqynzpwB8Ln79OQCfvq8btQ3gnM9zzl+OXzcQXdxT2AP7BgA8gmhfYsf/cwCf\nAPBnsX3X7h9jbBrADwH4nfhvhj2yb1uHCF/cy//3H/f7pjwFYIb8PRvb9hrGOOeiK+sCgLE7Oe90\nMMYOAXgMwLewh/YtXt6/AmARwN8CuAJgnXMursbdfH7+FoBfAJLS08PYO/u2ReiZskYOuGhOtkvB\nGKsC+HMA/4ZzvkHf2+37xjkPOOePAphGtIo7dZeP7Aowxn4YwCLn/KW7Ou9p7M6Z8v1WX8wB2E/+\nno5tew23GWMTnPN5xtgEopnYrgNjzEZ0Q/5DzvlfxOY9sW8UnPN1xtgzAD4CYIAxZsUzyt16fn4U\nwCcZYz8IoAigBuC/Y2/s257H/Z4pvwDgeMwCOwB+DMCX7vM23A98CcBPx69/GsAXP8BteU+IY5C/\nC+Btzvl/I2/t+n0DAMbYKGNsIH5dAvD9iOLmzwD40dhtV+4f5/yXOefTnPNDiK6xv+ec/yT2wL69\nO+zO8MX9LkjkM8Z+FsDfADAB/B7n/M37uQ3bDcbYHwE4C2CEMTYL4D8B+DUAf8IY+wyiqnj/9IPb\nwveMjwL45wBej+OuAPDvsTf2DQAmAHwuVgQZAP6Ec/5lxthbAD7PGPtVAOcRPZj2Cn4Re3ffemD3\n6ZR1Rp+GhsaeBGPHOPAb9zjKP9GdRzQ0NDT+IUOnWWtoaOxR6CpxGhoaGjsIu7P2hb4pa2ho7FHo\nmbKGhobGDsLunClrok9DQ0NjB0HPlDU0NPYodPhCQ0NDYwdhd4Yv9E1ZQ0Njj0LPlDU0NDR2EHbn\nTFkTfRoaGho7CHqmrKGhsUehwxcaGhoaOwi7M3yhq8RpaGjsSTDG/hrAyD0Os8w5TzdGfl+hb8oa\nGhoaOwia6NPQ0NDYQdA3ZQ0NDY0dBH1T1tDQ0NhB0DdlDQ0NjR0EfVPW0NDQ2EH4/1rBLC9f+zsY\nAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x432 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "yuYQlaubxUk9",
        "colab_type": "text"
      },
      "source": [
        "# GradCAM"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MqWyz3ugpt7_",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import cv2\n",
        "\n",
        "for i in range(0, len(y_pred)):\n",
        "  if emotions[y_true[i]] == 'Happy' and emotions[y_pred[i]] == 'Happy':\n",
        "    single_example = X_test[i]\n",
        "    label = 3\n",
        "\n",
        "    LAST_LAYER = \"conv3\"\n",
        "    grad_model = tf.keras.models.Model([model.inputs], [model.get_layer(LAST_LAYER).output, model.output])\n",
        "\n",
        "    with tf.GradientTape() as tape:\n",
        "        conv_outputs, preds = grad_model(single_example.reshape(1,48,48,1))\n",
        "        loss = preds[:,label]\n",
        "\n",
        "    output = conv_outputs[0]\n",
        "    grads = tape.gradient(loss, conv_outputs)[0]\n",
        "    weights = tf.reduce_mean(grads, axis=(0, 1))\n",
        "    cam = np.ones(output.shape[0: 2], dtype = np.float32)\n",
        "    for i, w in enumerate(weights):\n",
        "        cam += w * output[:, :, i]\n",
        "    cam = cv2.resize(cam.numpy(), (48, 48))\n",
        "    heatmap = (cam - cam.min()) / (cam.max() - cam.min())\n",
        "\n",
        "    cam = cv2.applyColorMap(np.uint8(255*heatmap), cv2.COLORMAP_JET)\n",
        "\n",
        "    plt.imshow(single_example.reshape(48,48),cmap='gray')\n",
        "    plt.imshow(cam,cmap='gray',alpha=0.5)\n",
        "    plt.figure()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BpqhJ-qWztWF",
        "colab_type": "text"
      },
      "source": [
        "# buggy code"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UVmsfT1lyZMx",
        "colab_type": "code",
        "outputId": "07f935b5-5edf-451b-bcdd-e922d566242a",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 511
        }
      },
      "source": [
        "y_test = Y_test.argmax(axis=1)\n",
        "\n",
        "# Select an image to show the saliency map on\n",
        "indx=102\n",
        "plt.title(label = \"class index : {}\".format(emotions[y_test[indx]]))\n",
        "plt.imshow(X_test[indx].reshape(48,48),cmap='gray')\n",
        "target_image = X_test[indx].reshape(1,48,48,1)\n",
        "\n",
        "weights = model.weights[-2][:,y_test[indx]]\n",
        "output_conv4_model = Model(inputs=model.input, outputs=model.get_layer(\"conv3\").output)\n",
        "layer_feature_maps = output_conv4_model.predict(target_image)\n",
        "\n",
        "#TODO: vectorize\n",
        "cam = 0\n",
        "for k in range(layer_feature_maps.shape[-1]): \n",
        "     cam += weights[k]*layer_feature_maps[:,:,:,k]\n",
        "\n",
        "\n",
        "cam = np.reshape(cam,[12,12,1])\n",
        "#plt.imshow(np.resize(cam,(48,48)))\n",
        "cam_resized= tf.image.resize(cam,[48,48])\n",
        "plt.imshow(target_image.reshape(48,48),cmap='gray')\n",
        "plt.imshow(cam_resized.numpy().reshape(48,48),alpha=0.4)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "error",
          "ename": "NameError",
          "evalue": "ignored",
          "traceback": [
            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
            "\u001b[0;32m<ipython-input-55-7ad42b7445f8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0mweights\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mweights\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0moutput_conv4_model\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mModel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minput\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moutputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_layer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"conv3\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     11\u001b[0m \u001b[0mlayer_feature_maps\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moutput_conv4_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtarget_image\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;31mNameError\u001b[0m: name 'Model' is not defined"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nA8kHb+jfwRHJAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bMyiK192roPe",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from tensorflow.keras import backend as K\n",
        "from tensorflow.keras import Model\n",
        "\n",
        "indx=102\n",
        "\n",
        "# # reshape individual image \n",
        "single_example = X_test[indx].reshape(1,48,48,1)\n",
        "\n",
        "# four lines are needed to generate a function that computes the gradients \n",
        "# remember that you need to specific which class the image belongs to. \n",
        "# this is specified in the example_model_output. \n",
        "input_tensors = [model.input]\n",
        "example_model_output = model.output[0][y_test[indx]]\n",
        "gradients = model.optimizer.get_gradients(example_model_output, model.input)\n",
        "compute_gradients = K.function(inputs = input_tensors, outputs = gradients)\n",
        "\n",
        "gradient_fun  = Model(inputs= model.input, outputs=gradients)\n",
        "gradients_value = gradient_fun(single_example.astype(\"float32\"))\n",
        "\n",
        "# plot the gradient values \n",
        "plt.figure()\n",
        "plt.imshow(single_example.reshape(48,48))\n",
        "plt.show()\n",
        "plt.figure()\n",
        "plt.imshow(gradients_value.numpy().reshape(48,48))\n",
        "plt.show()"
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}